POj1915

来源:互联网 发布:c语言可以编安卓软件吗 编辑:程序博客网 时间:2024/05/29 09:01

BFS裸题,用数组把8个方向存起来,然后直接BFS吧.(第一次写BFS,居然这么顺…)

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#define MAXN 305using namespace std;struct node{  int x,y,step;};int n;int dis[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};queue<node> q;int vis[MAXN][MAXN],aim[2];int bfs(int x,int y){    int i;    while(!q.empty())    {        q.pop();    }    node st;    st.x=x;    st.y=y;    st.step=0;    memset(vis,0,sizeof(vis));    q.push(st);    vis[x][y]=1;    while(!q.empty())    {        node qs=q.front();        q.pop();        if(qs.x==aim[0]&&qs.y==aim[1])        {            return qs.step;        }        node next;        for(i=0;i<8;i++)        {            next.x=qs.x+dis[i][0];            next.y=qs.y+dis[i][1];            if(next.x==aim[0]&&next.y==aim[1])            {                return qs.step+1;            }            if(next.x>=0&&next.x<n&&next.y>=0&&next.y<n&&vis[next.x][next.y]==0)            {                next.step=qs.step+1;                q.push(next);                vis[next.x][next.y]=1;            }        }    }    return -1;}int main(){    int T;    cin>>T;    while(T--)    {        cin>>n;        int u,v;        cin>>u>>v;        cin>>aim[0]>>aim[1];        int ans=bfs(u,v);        cout<<ans<<endl;    }    return 0;}
0 0
原创粉丝点击