迷宫问题

来源:互联网 发布:淘宝店铺客服流程 编辑:程序博客网 时间:2024/05/29 14:04

查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
定义一个二维数组:

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

输入
一个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
样例输出
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

#include<iostream>#include<cstdio>using namespace std;int a[105][105];int b[105][105];int c[50],d[50];int ans=1;int index=0;void fun(int t1,int t2,int t3,int t4){    int temp=b[t1][t2];    if(t1==t3&&t2==t4)    {        ans=temp;    }    temp+=1;    if (t1+1<5&&a[t1+1][t2]!=1&&b[t1+1][t2]>temp)    {        b[t1+1][t2]=temp;        fun(t1+1,t2,t3,t4);    }    if (t2+1<5&&a[t1][t2+1]!=1&&b[t1][t2+1]>temp)    {        b[t1][t2+1]=temp;        fun(t1,t2+1,t3,t4);    }    if (t1>0&&a[t1-1][t2]!=1&&b[t1-1][t2]>temp)    {        b[t1-1][t2]=temp;        fun(t1-1,t2,t3,t4);    }    if (t2>0&&a[t1][t2-1]!=1&&b[t1][t2-1]>temp)    {        b[t1][t2-1]=temp;        fun(t1,t2-1,t3,t4);    }     if (ans==b[t1][t2])    {        ans--;        c[index]=t1;        d[index++]=t2;    }}int main(){    for (int i=0;i<5;i++)    {        for (int j=0;j<5;j++)        {            cin>>a[i][j];        }    }    for (int i=0;i<5;i++)    {        for (int j=0;j<5;j++)        {            b[i][j]=1000;        }    }    b[0][0]=0;ans=1;    fun(0,0,4,4);    for (int i=index-1;i>=0;i--)    {       printf("(%d, %d)\n",c[i],d[i]);    }    return 0;}
0 0
原创粉丝点击