广度优先搜索
题目是洛谷上面的题目 题名:马的遍历链接:https://www.luogu.org/problemnew/show/P1443
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define meset(a) memset(a,0,sizeof(a))
int dir[]={-1,2,-1,-2,1,2,1,-2,2,1,-2,1,-2,-1,2,-1};
using namespace std;
int mp,vis,m,n,dx,dy;
struct node{
int x,y,step;
bool check()
{
if(x>=1&&x<=m&&y>=1&&y<=n)
{
if(!vis)
return true;
}
return false ;
}
}tail,head;
int main()
{
cin>>m>>n>>dx>>dy;
queue<node> q;
q.push({dx,dy,0});
vis=1;
while(!q.empty())
{
head=q.front();
q.pop();
for(int i=0;i<8;i++)
{
tail=head;
tail.x+=dir;
tail.y+=dir;
tail.step++;
if(tail.check())
{
q.push(tail);
mp=tail.step;
vis=1;
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(mp==0)
mp=-1;
if(i==dx&&j==dy)
mp=0;
printf("%-5d",mp);
}
cout<<endl;
}
} 多谢参考了
页:
[1]