poj 3894 迷宫

来源:互联网 发布:网络教育毕业鉴定 编辑:程序博客网 时间:2024/06/16 07:10

题目链接:http://poj.org/problem?id=3984


题目大意:

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)

题目分析:

bfs求解问题。


AC代码:

#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#include<queue>#include<cstdlib>#define LIM (nx>=0&&nx<=4&&ny>=0&&ny<=4)using namespace std;int map[5][5];int dirx[]={0,0,1,-1};int diry[]={1,-1,0,0};struct node{    int x,y,pre;}q[105];int front=0,rear=1;void print(int a){    if(q[a].pre!=-1)    {        print(q[a].pre);        printf("(%d, %d)\n",q[a].x,q[a].y);    }}void bfs(int x1,int y1){    q[front].x=x1;    q[front].y=y1;    q[front].pre=-1;    while(front<rear)    {        for(int i=0;i<4;i++)        {            int nx=q[front].x+dirx[i],ny=q[front].y+diry[i];            if(!LIM||map[nx][ny])                continue;            else            {                map[nx][ny]=1;                q[rear].x=nx;                q[rear].y=ny;                q[rear++].pre=front;            }            if(nx==4&&ny==4)                print(front);        }        front++;    }}int main(){    for(int i=0;i<5;i++)    {        for(int j=0;j<5;j++)            cin>>map[i][j];    }    printf("(0, 0)\n");    bfs(0,0);    printf("(4, 4)\n");    return 0;}


0 0
原创粉丝点击