当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 写个过河算法
| 写个过河算法 下载源代码 class InWhere {public: int boat; //船的位置,开始没有加这个,后来发现因为没有人在左边时候船在右边的话 ////////////////////////////////////////////////////////////////////////////// // 这种情况不存在,而且也容易产生错误。(船说到~靠,你以为我不是人就不叫 // 对象了吗,小看我,U should be sorry tu me.好了我知道错了,开始没考虑你我浪 // 费了好多时间了,已经受到精神上惩罚了,不要再肉体了) ////////////////////////////////////////////////////////////////////////////// BOOL Test();//测试是否能符合结点条件 int father;//爸爸 int mother;//妈妈 int plice;//警察 int son1;//儿子1 int son2;//儿子2 int daughter1;//女儿1 int daughter2;//女儿2 int shife;//土匪(CS打多了,称号改不过来了) InWhere & operator =(const InWhere &other); BOOL operator ==(const InWhere &other); BOOL operator !=(const InWhere &other); InWhere(); virtual ~InWhere();}; 各个状态如下,左边用1表示,中间用2表示,右边用3表示。好了,在对话框类里面加入一个CArray<InWhere, InWhere> m_wheres;变量记录所有的可能的结点。开始加入了,省去些界面代码: InWhere where; //临时结点int i,j,k,l,m,n,o,p,q;for(i=1; i<4; i++) for(j=1; j<4; j++) for(k=1; k<4; k++) for(l=1; l<4; l++) for(m=1; m<4; m++) for(n=1; n<4; n++) for(o=1; o<4; o++) for(p=1; p<4; p++) for(q = 1; q<4; q++) { where.daughter1 = i; where.daughter2 = j; where.father = k; where.mother = l; where.plice = m; where.shife = n; where.son1 = o; where.son2 = p; where.boat = q; if(where.Test()) { m_wheres.Add(where); ++AccordNum; ++nItem; } } 最重要的是InWhere::Test()函数,如下: BOOL InWhere::Test(){ //测试符合场景状况的结点状态 //必须要有个会驾船的和船在一边 if(father !=boat && mother !=boat && plice !=boat) return FALSE; //如果有人在船上那么船必须为2 //船上最多有2个人而且必须有个m_bCanDriver = TRUE的 int i = 0; if(daughter1 == 2) i++; if(daughter2 == 2) i++; if(son1 == 2) i++; if(son2 == 2) i++; if(father == 2) i++; if(mother == 2) i++; if(plice == 2) i++; if(shife == 2) i++; if(i>2) return FALSE; if(i != 0 && boat != 2) return FALSE; //警察和小偷不在一起时候,小偷会伤害家人 if(shife != plice) { if(daughter1 == shife || daughter2 == shife || son1 == shife || son2 == shife || father == shife || mother == shife) return FALSE; } //当爸爸妈妈不在一起时,妈妈骂儿子,爸爸骂女儿 if(mother != father) { if(daughter1 == father || daughter2 == father || son1 == mother || son2 == mother) return FALSE; } re |