POJ 3984 迷宫(BFS)

入门BFS,第一次做,部分借鉴了大牛的

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;

int a[5][5];
bool visit[5][5];
int dx[4]={0,1,0,-1}; // 四个方向:0为右,1为下,2为左,3为上
int dy[4]={1,0,-1,0};

struct Node
{
    int x;
    int y;
    int s; // 路径长度
    int direc[30]; //记录方向
}node,next;
bool judge(int x,int y)
{
    if(x<0 || x>4 || y<0 || y>4)
        return true;
    if(visit[x][y]==true || a[x][y]==1)
        return true;
    visit[x][y]=true;  // 访问后标记一下
    return false;
}
Node bfs()
{
    queue<Node>q;
    visit[node.x][node.y]=true;
    q.push(node);
    while(!q.empty())
    {
        node=q.front();
        if(node.x==4 && node.y==4)
            return node;
        q.pop();
        for(int i=0;i<4;i++) // 判断四个方向
        {
            next=node;
            next.x=node.x+dx[i];
            next.y=node.y+dy[i];
            if(judge(next.x,next.y))
                continue;
            next.direc[node.s]=i;
            next.s=node.s+1;
            q.push(next);
        }
    }
}
int main()
{
    //freopen("in.txt","r",stdin);
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            scanf("%d",&a[i][j]);
    Node ans=bfs();
    int x=0,y=0;
    printf("(0, 0)\n");
    for(int i=0;i<ans.s;i++)
    {
        x+=dx[ans.direc[i]];
        y+=dy[ans.direc[i]];
        printf("(%d, %d)\n",x,y);
    }
    return 0;
}

 

posted @ 2016-08-02 19:28  Pacify  阅读(241)  评论(0编辑  收藏  举报