POJ 3984 迷宫问题

来源:互联网 发布:java课程设计选题 编辑:程序博客网 时间:2024/06/05 21:53

迷宫问题
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 16582 Accepted: 9890
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 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
Sample Output

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

代码:

#include<cstdio>#include<iostream>#include<cstring>using namespace std;int map[10][10];int visit[10][10];struct node{    int x;    int y;    int f;}que[30];int main(){    for(int i=0;i<5;i++)        for(int j=0;j<5;j++)            scanf("%d",&map[i][j]);    int head=1;    int tail=1;    que[tail].x=0;    que[tail].y=0;    que[tail].f=0;    tail++;    visit[0][0]=1;    int tx,ty;    int flag=0;    int next[4][2]    {        {1,0},        {0,1},        {-1,0},        {0,-1}    };    while(head<tail)    {        for(int i=0;i<4;i++)        {            tx=que[head].x+next[i][0];            ty=que[head].y+next[i][1];            if(tx<0||tx>4||ty<0||ty>4)                continue;            if(map[tx][ty]==0&&visit[tx][ty]==0)            {                que[tail].x=tx;                que[tail].y=ty;                que[tail].f=head;                visit[tx][ty]=1;                tail++;            }            if(tx==4&&ty==4)            {                flag=1;                break;            }        }        if(flag==1)            break;        head++;    }    int numx[30]={0};    int numy[30]={0};    //printf("%d\n",head);    int i=0;    tail--;    while(1)    {        numx[i]=que[head].x;        numy[i]=que[head].y;        int item=que[head].f;        //printf("%d %d    %d\n",que[head].x,que[head].y,head);        head=item;        if(head==0)            break;        i++;    }    //printf("%d\n",i);    for(;i>=0;i--)    {        printf("(%d, %d)\n",numx[i],numy[i]);    }    printf("(4, 4)\n");    return 0;}

PS:基础bfs,第一次忘标记RE了==

0 0
原创粉丝点击