劳烦大家看下这个程序,帮我找出错误所在

乙丙丁 2012-07-28 08:54:05
迷宫问题(求最少的步数)查看提交统计提问时间限制: 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);
}


我是菜鸟一个,希望大家助我,帮我成长。
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
乙丙丁 2012-07-28
  • 打赏
  • 举报
回复
多个while(1)
乙丙丁 2012-07-28
  • 打赏
  • 举报
回复
没报错误,就是结果不对
1. for(j=0;j<m;j++)
scanf("%s",a[j]);
a是字符数组,二维的,上面的语句可行吗?
2. 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;}
}
这些语句好像没执行。
ies_sweet 2012-07-28
  • 打赏
  • 举报
回复
楼主的代码是编译不通过
还是运行结果不是预期的?

如果是编译不通过,报出的错误信息能否贴上来?
hen_hao_ji 2012-07-28
  • 打赏
  • 举报
回复
楼主提交报什么错误?这题就是个简单的 BFS

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧