/*
网络上的青蛙跳游戏。
还没有把路径打印出来,公青蛙表示为 1,母青蛙表示成2;
直接使用深度搜索就OK了,注意规则,两只相同的青蛙不能相连,
路径可以直接用栈进行保存,然后输出来。。
*/
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
#define manx 100009
int 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);
}
青蛙跳
最新推荐文章于 2024-03-27 16:08:48 发布