[POJ](3984)迷宫问题 ---BFS+队列模拟(图+队列模拟)***

来源:互联网 发布:我国经济数据 编辑:程序博客网 时间:2024/05/16 11:52
迷宫问题
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24415 Accepted: 14241

Description

定义一个二维数组: 
int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0

Sample Output

(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)


注:暂待分析*****


AC代码:

#include<iostream>#include<queue>#include<cstring>#include<cstdio>using namespace std;int mmap[10][10];//bool vis[10][10];int dirx[]={1,-1,0,0};int diry[]={0,0,1,-1};struct node{    int x,y;    int pre;};struct node que[10];void print(int st){    if(que[st].pre!=-1)    {        print(que[st].pre);            printf("(%d, %d)\n",que[st].x,que[st].y);    }}void bfs(){    int st=0;    int en=1;    que[st].x=0;    que[st].y=0;    que[st].pre=-1;    while(st<en)    {        for(int i=0;i<4;i++)        {            int xx=que[st].x+dirx[i];            int yy=que[st].y+diry[i];            if(xx<0||xx>=5||yy<0||yy>=5||mmap[xx][yy]==1)                continue;            else            {                mmap[xx][yy]=1;                que[en].pre=st;                que[en].x=xx;                que[en].y=yy;                en++;            }            if(xx==4 && yy==4)            {                print(st);                return;            }        }        st++;    }}int main(){    memset(mmap,0,sizeof(mmap));    for(int i=0;i<5;i++)    {        for(int j=0;j<5;j++)            cin>>mmap[i][j];    }    printf("(0, 0)\n");    bfs();    printf("(4, 4)\n");    return 0;}


原创粉丝点击