POJ 3984 迷宫(BFS)

2018-06-17 23:56:08来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

入门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;
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:使用zookeeper实现分布式master选举(c 接口版本)

下一篇:C++程序实例唯一方案,窗口只打开一次,程序只打开一次