马踏飞燕(BFS)
题目
同样是道模板题/裸题
SDNU1025
PS:这题我不会别的方法,,,也不知道有没有非bfs的方法
闲话少说,贴代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int c[8]={2,2,1,1,-1,-1,-2,-2}; //数组c,d分别用来存储马每次所能移动的方位
int d[8]={1,-1,2,-2,2,-2,1,-1};//也可用一个二维数组存储
bool vis[106][106]={0},w=0;//vis数组标记是否已经走过
int m,n,x,y;
void bfs(int a,int b,int k)
{
if(a==m&&b==n)//马的坐标与燕子的坐标重合(成功到达)
{
w=1;return;
}
if(k==5)return; //超过步数限制
for(int i=0;i<8;i++)
{
a+=c[i];
b+=d[i];//走一步
if(vis[a][b]==0&&a>0&&a<100&&b>0&&b<100)//判断该点是否走过及是否跃出范围
{
vis[a][b]=1;bfs(a,b,k+1);vis[a][b]=0;//标记该点并进行下一步搜索
}
a-=c[i];//搜索完记得将坐标归位
b-=d[i];
}
}
int main()
{
cin>>x>>y>>m>>n;
bfs(x,y,1);
if(w==0)cout<<"N"<<endl;
else cout<<"Y"<<endl;
return 0;
}
PS:自我感觉比dfs要好理解一丢丢