青蛙跳
/*网络上的青蛙跳游戏。 还没有把路径打印出来,公青蛙表示为 1,母青蛙表示成2;直接使用深度搜索就OK了,注意规则,两只相同的青蛙不能相连,路径可以直接用栈进行保存,然后输出来。。 */#include<iostream>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;#define manx 100009int x[manx],flag;bool judge(){ for(int i=1;i<=3;i++) if(x[i]!=2) return false; for(int i=5;i<=7;i++) if(x[i]!=1) return false; if(x[4]) return false; return true;}void dfs(int n){ /// 分好四个方向就Ok了 if(judge()){ flag=1; return ; } if(n>7 || n<1) return ; if(n-1>0 && x[n-1]==1) { ////公向左 swap(x[n-1],x[n]); dfs(n-1); swap(x[n-1],x[n]); } if(n+1<8 && x[n+1]==2){ //// 母向右 swap(x[n+1],x[n]); dfs(n+1); swap(x[n+1],x[n]); } if(n-2>0 && x[n-2]==1 && x[n-1]==2){ //// 公跳跃 swap(x[n-2],x[n]); dfs(n-2); swap(x[n],x[n-2]); } if(n+2<8 && x[n+1]==1 && x[n+2]==2){ //// 母跳跃 swap(x[n],x[n+2]); dfs(n+2); swap(x[n],x[n+2]); } return ;}int main(){ flag=0; for(int i=0;i<=10;i++) x[i]=0; for(int i=1;i<=3;i++) x[i]=1; for(int i=5;i<=7;i++) x[i]=2; dfs(4); if(flag) cout<<"yes!!"<<endl; else cout<<"no!!"<<endl; while(1);}