迷宫的最短路径

来源:互联网 发布:淘宝有漫威旗舰店吗 编辑:程序博客网 时间:2024/05/15 02:46

Problem Description

用“怀中抱妹杀”干掉大巫婆后,木有结草童鞋提起钢枪去找女神的秀发。进入巫婆的大宫殿。谁知宫殿的大厅是一个大迷宫,因为木有结草已经迫不及待与女神见面,他要你帮帮他算一算到女神所在的地牢的入口的最短距离有多少步。假设木有结草一步只可以向上下左右走一格。不能走到有大坑的地方。保证可以走到地牢入口。

Input

输入的第一行为(t<=50)表示有t组数据。
每组数据的第一行有两个整数a<=25,b<=25,表示大厅的大小。
接下来的a行b列有一个矩阵,描述大厅的地貌。
“#”表示坑,“.”表示路,“+”表示地牢入口,“*”表示木有结草开始所在的位置。数据保证有解。

Output

每组数据输出一个数,表示木有结草走到地牢入口的最短步数。

Sample Input

15 6######......#+#..#.#...#*...##

Sample Output

9提示:数据结构之队列queue+简单搜索。
#include<stdio.h>char a[50][50];int sum,n,m;void search(int x,int y,int num){char temp;if(x>m||y>n||x<1||y<1||a[x][y]=='.')return;if(a[x][y]=='+'){if(sum>num)sum=num;return;}a[x][y]='#';temp=a[x+1][y];search(x+1,y,num+1);a[x+1][y]=temp;temp=a[x-1][y];search(x-1,y,num+1);a[x-1][y]=temp;temp=a[x][y+1];search(x,y+1,num+1);a[x][y+1]=temp;temp=a[x][y-1];search(x,y-1,num+1);a[x][y-1]=temp;}void main(){int t,x,y;int i,j;scanf("%d",&t);while(t--){sum=1000000;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){getchar();for(j=1;j<=m;j++){scanf("%c",&a[i][j]);if(a[i][j]=='*'){x=i;y=j;}}}search(x+1,y,0);search(x-1,y,0);search(x,y+1,0);search(x,y-1,0);printf("%d\n",sum+1);}}