JNAzreal 发表于 2019-4-8 16:32

广度优先搜索

题目是洛谷上面的题目 题名:马的遍历
链接: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;
    }
}

winna 发表于 2019-4-8 17:14

多谢参考了
页: [1]
查看完整版本: 广度优先搜索