迷宫问题

来源:互联网 发布:环保产业发展现状数据 编辑:程序博客网 时间:2024/05/14 12:06

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)
题目大意:给一个5*5的矩阵只有0和1,只有一条路能从(0,0)到达(4,4),输出这条路的每一个坐标;


题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19699

源代码:

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#include<string>using namespace std;int a[5][5];int d[4][2]={0,1,0,-1,1,0,-1,0};int ans=0;struct node{    int x;    int y;}paze[25];void print(){    int i;    printf("(0, 0)\n");    for(i=0;i<ans;i++)        printf("(%d, %d)\n",paze[i].x,paze[i].y);}void dfs(int xx,int yy){    int i;    for(i=0;i<4;i++)    {        int nx=xx+d[i][0];        int ny=yy+d[i][1];        if(nx>=0&&nx<5&&ny>=0&&ny<5&&a[nx][ny]==0)        {            a[nx][ny]=1;            paze[ans].x=nx;            paze[ans++].y=ny;            if(nx==4&&ny==4)            {                print();                return ;            }            else                dfs(nx,ny);            a[nx][ny]=0;            paze[--ans].x=0;            paze[ans].y=0;        }    }}int main(){    int i,j;    for(i=0;i<5;i++)        for(j=0;j<5;j++)            scanf("%d",&a[i][j]);    dfs(0,0);    return 0;}



0 0