为什么总是runtimeerror?

cany113 2012-07-25 03:29:51
sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫。
sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数。
知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的map。
比赛规则是:从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走
输入:
输入有多组数据。
每组数据输入n(0<n<=100),然后输入n*n的01矩阵,0代表该格子没有障碍,为1表示有障碍物。
注意:如果输入中的原点和终点为1则这个迷宫是不可达的。

输出:
对每组输入输出该迷宫的最短步数,若不能到达则输出-1。

样例输入:
2
0 1
0 0
5
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0
0 1 1 1 0
1 0 1 0 0
样例输出:
2
8
#include<stdio.h>
#define N 105
int a[N][N]={0};
int visit[N][N]={0};
typedef struct queue{
int i;int j;int num;
}queue;
int k=0;
queue test[N*N]={0};
int main(){
int i,j,m,n;
while(scanf("%d",&n)!=EOF){
queue p0={1,1,0};
visit[1][1]=1;
test[k]=p0;
k=k+1;
for(j=0;j<=n+1;j++){
a[0][j]=-1;
a[j][0]=-1;
a[n+1][j]=-1;
a[j][n+1]=-1;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&a[i][j]);
}
}
if(a[1][1]==1||a[n][n]==1){
printf("%d",-1);
}
else{
for(m=0;(test[m].i!=n)||(test[m].j!=n);m++){
if(m<=k){
bfs(test[m]);
}
else{
break;
}
}
if(m<k){
printf("%d\n",test[m].num);
}
else{
printf("%d\n",-1);
}
}
memset(a,0,sizeof(a));
memset(visit,0,sizeof(visit));
memset(test,0,sizeof(test));
k=0;
}
return 0;
}
int bfs(queue q0){
if((a[q0.i-1][q0.j]==0)&&(visit[q0.i-1][q0.j]==0)){//shang
test[k].i=q0.i-1;
test[k].j=q0.j;
test[k].num=q0.num+1;
k=k+1;
visit[q0.i-1][q0.j]=1;
}
if((a[q0.i+1][q0.j]==0)&&(visit[q0.i+1][q0.j]==0)){//xia
test[k].i=q0.i+1;
test[k].j=q0.j;
test[k].num=q0.num+1;
k=k+1;
visit[q0.i+1][q0.j]=1;
}
if((a[q0.i][q0.j-1]==0)&&(visit[q0.i][q0.j-1]==0)){//zuo
test[k].i=q0.i;
test[k].j=q0.j-1;
test[k].num=q0.num+1;
k=k+1;
visit[q0.i][q0.j-1]=1;
}
if((a[q0.i][q0.j+1]==0)&&(visit[q0.i][q0.j+1]==0)){//you
test[k].i=q0.i;
test[k].j=q0.j+1;
test[k].num=q0.num+1;
k=k+1;
visit[q0.i][q0.j+1]=1;
}
return 0;
}

...全文
262 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
x363635334 2012-07-26
  • 打赏
  • 举报
回复
这个需要F10调试的,楼主不知道吧 我也想知道是哪一组,可惜不太习惯楼主的编码风格
ies_sweet 2012-07-26
  • 打赏
  • 举报
回复
运行时错误,多是内存越界造成的

有可能是某组数据造成越界,破坏了内存,但是当时并没有崩溃

直到某组数据触碰到问题区域时,系统报错了

这种问题,要耐心的检查

楼主应该先好好想想设计思路,有没有大的问题?

耐心调试,这个很能提高水平的
cany113 2012-07-25
  • 打赏
  • 举报
回复
问题是不知道哪组测试数据是runtimeerror!
赵4老师 2012-07-25
  • 打赏
  • 举报
回复
runtime error崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
shen_wei 2012-07-25
  • 打赏
  • 举报
回复
简单测试了下

还是可以的!!

2
0 0
0 1
-1
2
0 0
0 0
2
peng_weida 2012-07-25
  • 打赏
  • 举报
回复
题号是多少啊,看看去
pathuang68 2012-07-25
  • 打赏
  • 举报
回复
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
cany113 2012-07-25
  • 打赏
  • 举报
回复
矩阵做多是100*100,我设置N为105,应该不会越界吧。。。提交的时候测试10组数据。。要么accepted,要么runtimeerror
W170532934 2012-07-25
  • 打赏
  • 举报
回复
你确定你的代码里数组下标什么的不会越界么??

69,373

社区成员

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

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