OpenJ_bailian 4127

BFS

#include<bits/stdc++.h>
using namespace std;
#define maxn 500
struct point
{
    int x,y,f;
    //point(int x,int y,int f):x(x),y(y),f(f){}
};
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
point ans[maxn],que[maxn];
int pre[maxn],m[5][5],vis[5][5];
int cas;
void bfs()
{
    int head=1,tail=1;
    que[head].x=0;
    que[head].y=0;
    que[head].f=-1;
    tail++;
    while(head<tail)
    {
        int xx=que[head].x;
        int yy=que[head].y;
        if(xx==4&&yy==4)
        {
             cas=0;
            while(que[head].f!=-1)
            {
                ans[cas++]=que[head];

                que[head]=que[que[head].f];
            }
            return ;
        }
        for(int i=0;i<4;i++)
        {
            int dxx=xx+dx[i];
            int dyy=yy+dy[i];
            if(dxx>=0&&dxx<5&&dyy>=0&&dyy<5&&m[dxx][dyy]!=1)
            {
                m[dxx][dyy]=1;
                que[tail].x=dxx;
                que[tail].y=dyy;
                que[tail].f=head;
                tail++;
            }
            if(dxx==4&&dyy==4)
            {
                break;
            }
        }
        head++;
    }
}
int main()
{
    int i,j;
    memset(vis,0,sizeof(vis));
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            cin>>m[i][j];
        }
    }
    bfs();
    ans[cas].x=0,ans[cas].y=0;
    for(int i=cas;i>=0;i--)
    cout<<"("<<ans[i].x<<", "<<ans[i].y<<")"<<endl;
    return 0;
}

posted @ 2018-05-08 21:10  MCQ  阅读(185)  评论(0编辑  收藏  举报