迷宫问题(求最少的步数)查看提交统计提问时间限制: 1000ms内存限制: 2000kB
描述
第一行为测试数据的个数k,下面的若干行紧跟k个测试数据。
每个测试数据构成如下:
1. 第一行两个整数m,n,代表迷宫矩形的行数和列数(1<=m<=100,1<=n<=100)。
2. 接下来的m行,每行n个字符,仅由'.'和'x'组成。其中'.'表示通路,'x'表示建筑。每一步只能走上下左右四个方向的任意一个(如果该方向仍在给定地图内)。m行中,第一行的第一个字符代表是北门,最后一行的最后一个字符代表是南门,这两个字符保证是'.'。
输出从北门到南门最快要走几步。如果从北门不能走到南门,输出-1。
**************************************************************
注意:读入数据时请尽量避免使用scanf("%c", &ch);这种方式,容易
引起数据输入混乱。对于迷宫字符串,直接使用scanf("%s"...)格式
读入,可以避免前面scanf("%d%d",...)读取行数和列数留下的回车符
造成的麻烦(这时不再需要使用getchar()读取回车符。getchar()
读取回车符时在Linux下和Windows下的行为是不一样的,这样会造成
问题。
**************************************************************
/************************************************************\
请不要在程序中使用system("pause");之类的东西,会导致
Runtime error! 也不要输出任何非题目要求的内容!!!
\************************************************************/
样例输入
2
4 4
.xxx
...x
xx.x
xx..
5 5
.....
.....
#...#
##..#
.....样例输出
6
8
提示
注意:
(1)不要向标准输出(屏幕)写入题目要求输出结果之外的其他数据,否则你会被判为“Wrong Answer”,即错误的运行结果。
(2)你的程序也不能试图读或写任何文件,否则你可能被判为“Runtime Error”(运行时错误)或“Wrong Answer”(错误结果)。
(3)对于GCC或者G++,main()函数的返回值必须是int型,否则可能导致“Compile Error”即编译错误。
我的程序:
#include "stdio.h"
#include "string.h"
char a[5][5];
int N=0;int U=0;
int m=0;int n=0;
void fun(int i,int j,int k)
{if(k)
N+=2;
if(i==m&&j==n)
U=1;
if(a[i+1][j]=='.')
U=2;
if(a[i][j+1]=='.')
U=3;
if(a[i-1][j]=='.')
U=4;
if(a[i][j-1]=='.')
U=5;
if(!U)
{U=6;printf("-1");}
switch(U)
{
case1:printf("%d\n",N);break;
case2:k=0;fun(i+1,j,k);break;
case3:k=0;fun(i,j+1,k);break;
case4:k=1;fun(i-1,j,k);break;
case5:k=1;fun(i,j-1,k);
case6:break;}
}
int main()
{void fum(int,int,int);
int k=0;int j=0;int i=0;
scanf("%d",&k);
for(i=k;i!=0;i--)
{ scanf("%d %d",&m,&n);
N=m+n;
for(j=0;j<m;j++)
scanf("%s",a[j]);
fun(0,0,0);
memset(a,'\0',sizeof(a));}
while(1);
}
我是菜鸟一个,希望大家助我,帮我成长。