DFS/BFS的小白整理(二)

马踏飞燕(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要好理解一丢丢

发布了11 篇原创文章 · 获赞 2 · 访问量 4018

猜你喜欢

转载自blog.csdn.net/qq_39657434/article/details/103038545