poj——3894 迷宫问题

来源:互联网 发布:淘宝详情页图片模板 编辑:程序博客网 时间:2024/05/02 00:45

水题,简单的BFS,不过也有很多人用DFS做,题意我就不说了,本身很明白!

用一个一维数组把搜到的点记下来,根据他们的父节点倒着输出来!

迷宫问题
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8990 Accepted: 5317

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)
#include<stdio.h>#include<queue>#include<string.h>#include<algorithm>using namespace std;#define maxn 110int fx[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int father[maxn][maxn];int visit[maxn][maxn];int map1[maxn][maxn];int dist[maxn][maxn];int short1[maxn];int sx=0,sy=0;int ex=4,ey=4;int n=5;void pt(){    int x=ex,y=ey;    int j=0;    for(;;)    {        short1[j++]=father[x][y];        int fx=father[x][y]/n;        int fy=father[x][y]%n;        if(fx==sx&&fx==sy)        {            break;        }        x=fx;        y=fy;    }    int px,py;    while(j--)    {        px=short1[j]/n;        py=short1[j]%n;        printf("(%d, %d)\n",px,py);    }    printf("(%d, %d)\n",ex,ey);}void bfs(int x,int y){    int u,v,nx,ny;    u=x*n+y;    queue<int> s;    s.push(u);    father[x][y]=-1;    visit[x][y]=1;    dist[x][y]=0;    while(!s.empty())    {        u=s.front();        s.pop();        x=u/n;        y=u%n;        for(int i=0;i<4;i++)        {            nx=x+fx[i][0];            ny=y+fx[i][1];            if(!visit[nx][ny]&&nx>=0&&nx<5&&ny>=0&&ny<5&&map1[nx][ny]==0)            {                visit[nx][ny]=1;                dist[nx][ny]=dist[x][y]+1;                father[nx][ny]=u;                v=nx*n+ny;                s.push(v);                if(nx==ex&&ny==ey)                {                    pt();                }            }        }    }}int main(){    int i,j;    for(i=0;i<5;i++)        for(j=0;j<5;j++)        scanf("%d",&map1[i][j]);    bfs(0,0);    return 0;}


0 0
原创粉丝点击