BFS-基础模版

/*
    小水题当个模版
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <algorithm>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#define M 1000  //修改点:数据大小

//修改点:结构体内容
struct node
{
    int x,y;
    int step;
};
struct node front,rear;

//修改点:行走方式
int xx[8]={-2,-1,1,2,2,1,-1,-2};
int yy[8]={1,2,2,1,-1,-2,-2,-1};

bool visit[M][M];
int n,ansx,ansy;
queue<node>q;

int BFS(int x,int y)
{
    if(x==ansx&&y==ansy)
        return 0;
    int dx,dy,i;
    front.x=x,front.y=y,front.step=0;
    q.push(front);
    visit[x][y]=true;
    while(!q.empty())
    {
        front=q.front();
        q.pop();
        for(i=0;i<8;i++)
        {
            dx=front.x+xx[i],dy=front.y+yy[i];
            if(dx>=0&&dx<n&&dy>=0&&dy<n&&!visit[dx][dy])
            {
                visit[dx][dy]=true;
                if(dx==ansx&&dy==ansy)
                    return front.step+1;
                rear.x=dx,rear.y=dy,rear.step=front.step+1;
                q.push(rear);
            }
        }
    }
}

int main()
{
    int t,x,y,ans;
    scanf("%d",&t);
    while(t--)
    {
        while(!q.empty()) q.pop();
        memset(visit,false,sizeof(visit));
        scanf("%d",&n);
        scanf("%d%d",&x,&y);
        scanf("%d%d",&ansx,&ansy);
        ans=BFS(x,y);
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/mochenmochen/p/5156898.html