首页 > 其他 > 详细

POJ 3984 迷宫(BFS)

时间:2016-08-02 21:00:10      阅读:145      评论:0      收藏:0      [点我收藏+]

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

 

POJ 3984 迷宫(BFS)

原文:http://www.cnblogs.com/pach/p/5730450.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!