代码在open judge上无法通过。runtime error。请帮我修改一下。谢谢

题目是第一行两个整数M,N,代表矩形的行数和列数(1<=M<=100,1<=N<=100)。接下来的M行每行N个字符,仅由'.'和'x'组成。其中'.'表示通路,'x'表... 题目是第一行两个整数M,N,代表矩形的行数和列数(1<=M<=100,1<=N<=100)。接下来的M行每行N个字符,仅由'.'和'x'组成。
其中'.'表示通路,'x'表示建筑。每一步只能走上下左右四个方向的任意一个(如果该方向仍在给定地图内)。第一行的第一个字符代表是北门,最后一行的最后一个字符代表是南门,这两个字符保证是'.'。

输出从北门到南门最快要走几步。
如果从北门不能走到南门,输出-1。

【示例输入】
4 4
. x x x
. . . x
x x . x
x x . .

【示例输出】
6

(注:本题允许没有输入输出界面提示)
#include <stdio.h>
#include <stdlib.h>
int maze[100][100]={0};
static int step=0;
int endx,endy,m,n;
int flag;
int visit(int startx,int starty)
{
//i=startx,j=starty
maze[startx][starty]=2;
if(startx==endx&&starty==endy)
flag=1;
if(maze[startx][starty+1]=='.'&&starty<n&&flag==0)//right
{
step++;
visit(startx,starty+1);
}
if(maze[startx+1][starty]=='.'&&startx<m&&flag==0)//down
{
step++;
visit(startx+1,starty);
}
if(maze[startx][starty-1]=='.'&&starty>1&&flag==0)//left
{
step++;
visit(startx,starty-1);
}
if(maze[startx-1][starty]=='.'&&startx>1&&flag==0)//up
{
step++;
visit(startx-1,starty);
}
if(flag==1)
return step;
return step--;
}
void print_maze(int m,int n)
{
int i,j;
printf("print the maze map:\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(j%5==0)
printf("\n");
printf("%d ",maze[i][j]);
}
system("pause");
}
int main()
{
int i,j;
int startx,starty;//startXY
scanf("%d %d",&m,&n);// line&column
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf(" %c",&maze[i][j]);//
//print_maze(m,n);//
maze[i-1][j-1]=maze[1][1]='.';
startx=starty=1;
endx=m;
endy=n;

if(visit(startx,starty)==0)
printf("-1\n");
else
printf("step=%d",step);
system("pause");
return 0;
}
展开
 我来答
White_MouseYBZ
2012-04-05 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6433万
展开全部
回答求助。
可能会使你失望。因为我这里没有这个问题,就不太好修改。但有一个思路供参考:是不是你用scanf输入时用时太长了?按这个思路,可做如下改动而改善。
1.把全局数组maze改为char型。
2.在主函数中增加一个char型数组存放两个字符'.'和.x'。
3.只输入m和n,不再输入地图,而由一个伪随机函数来自动填充,这样能节约大量时间……
修改后的主函数如下:
void main(void){
char cx[]=".x" ;
int i,j,startx,starty;//startXY
srand(time(0));
scanf("%d%d",&m,&n);// line&column
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
maze[i][j]=cx[rand()&1];//用伪随机函数填充地图
maze[m][n]=maze[1][1]='.';//入口和出口固定为'.'
printf("%c ",maze[i][j]);//打印地图
//scanf(" %c",&maze[i][j]);//
//print_maze(m,n);//
}
printf("\n");
}
startx=starty=1;
endx=m;
endy=n;

if(visit(startx,starty)==0) printf("-1\n");
else printf("step=%d\n",step);
system("pause");
}
如果还不行,把scanf("%d%d",&m,&n)一句先挂起,改成m=n=3固定一个值试试,再把最后的system("pause")删除,这是耗时间的。如果这样做行了,那就找到问题了,再来想办法。1000ms对计算机来说是很长的时间,要干很多事情的,这段代码的核心部分不会花费多长时间……
追问
我发了个信息给你,看到了吗?能帮我试试修改下吗,不知道怎么回事不能通过
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式