主题:严蔚敏数据结构 迷宫程序。编译出错,求帮忙。
是严蔚敏数据结构里面那个迷宫的问题。他编译过了,有一个提示是105 F:\My c\sjjg\1213_migong.c [Warning] passing arg 1 of `next_step_is_wall' from incompatible pointer type
运行老是出错。求帮忙。出错提示:运行出错,需要关闭。
#include<stdio.h>
#include<stdlib.h>
struct struct_step /*格子的类,*/
{
int x;
int y;
};
struct struct_step_stuck /*存放走过的路径,是一个栈类*/
{
struct struct_step step[70];
int num;
};
/*注意:最开始写的时候,下面struct struct_step_stuck形参都忘了用指针形式的了.所以入栈后也为空等等云云*/
void push_stuck(struct struct_step_stuck *step_stuck,struct struct_step step) /*将后面的格子入栈,就是加入到路径*/
{
step_stuck->step[step_stuck->num]=step;
step_stuck->num++;
}
void pop_stuck(struct struct_step_stuck *step_stuck)/*将栈顶元素出栈*/
{
step_stuck->num--;
}
int isempty_stuck(struct struct_step_stuck *step_stuck) /*判断栈是否为空*/
{
if(step_stuck->num==0)
return 1;
else
return 0;
}
struct struct_step top(struct struct_step_stuck *step_stuck)/*取栈顶元素*/
{
if(step_stuck->num==0)
{
printf("top stuck error\n");
exit(1);
}
return step_stuck->step[step_stuck->num-1];
}
int next_step_is_wall(int **a,struct struct_step cur_step,struct struct_step fx) /*下一步是否为墙*/
{
struct struct_step next_step;
int i=0;
for(i=0;i<7;i++)
printf("%d\t",a[0][i]);
if(cur_step.x+fx.x<0||cur_step.x+fx.x>7) /*是数组左右外围的墙了*/
return 1;
if(cur_step.y+fx.y<0||cur_step.y+fx.y>7) /*是数组上下外围的墙了*/
return 1;
next_step.x=cur_step.x+fx.x;/*next_step=cur_step+fx;*/
next_step.y=cur_step.y+fx.y;
if(a[next_step.x][next_step.y]==-1 || a[next_step.x][next_step.y]==1) /*下一步是数组里面的墙或走过的路径*/
return 1;
else//if(a[next_step.x][next_step.y]==0) /*是可以走的路*/
return 0;
}
void print_stuck(struct struct_step_stuck *step_stuck) /*输出栈中所胡的元素*/
{
int i;
if(step_stuck->num==0)
{
printf("there is no element in the stuck");
return;
}
/*else*/
for(i=0;i<step_stuck->num;i++)
{
printf("%d,%d%c",step_stuck->step[i].x,step_stuck->step[i].y, i==step_stuck->num?'\n':'\t');
}
}
int main()
{
struct struct_step cur_step,next_step,final_step; /*curstep为当前人所处的格子,nextstep为
下一步要走的格子*/
struct struct_step_stuck step_stuck;/*用来记录所走的路径的*/
/*格子为-1,表示是墙,格子为0表示可以走的路,格子为1表示走过的路径,左上角的0为起点,右下角的(6,0)位位置为终点*/
int a[8][8]={
0, 0, 0, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0, 0, 0,
-1,-1,-1, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0,-1,-1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,-1, 0,-1, 0,
0, 0, 0,-1, 0,-1, 0, 0
};
int i;
struct struct_step fangxiang[4]={ {0,1},{1,0},{0,-1},{-1,0} };/*方向:东,南,西,北.*/
cur_step.x=0,cur_step.y=0; /*cur_step={0,0}*/
final_step.x=7,final_step.y=6;/*final_step={7,6}; */ /*假设是从{0,0}走到{7,6}这个出口*/
step_stuck.num=0; /*初始化栈*/
push_stuck(&step_stuck,cur_step); /*将{0,0}入栈*/
print_stuck(&step_stuck);
printf("%d\n",isempty_stuck(&step_stuck));
while(!isempty_stuck(&step_stuck))
{
for(i=0;i<4;i++)
{
if(next_step_is_wall(a,cur_step,fangxiang[i])) /*如果这个方向下一格子为墙或是不能走的路的话,则判断下一个方向*/
continue;
/*下一步不为墙,是可以走的路*/
next_step.x=cur_step.x+fangxiang[i].x;/*next_step=cur_step+fangxiang[i];*/
next_step.y=cur_step.y+fangxiang[i].y;
push_stuck(&step_stuck,next_step); /*将下一格子入栈*/
cur_step=top(&step_stuck); /*当前位置设为栈顶元素,就是最后走的那步*/
/*如果栈顶元素为出路的话,则输出路径,任务完成了并结束程序*/
if(cur_step.x==final_step.x&&cur_step.y==final_step.y)/*cur_step==final_step*/
{
print_stuck(&step_stuck);
exit(0);
}
break;/*不是出路则判断下一个格子,注意不是下一个方向*/
}
if(i==4) /*4个方向里,如果除了前一步的其它三个方向都不能走的话.将当前步标记为墙,并出栈*/
{
cur_step=top(&step_stuck);
a[cur_step.x][cur_step.y]=-1;/*标记为墙*/
pop_stuck(&step_stuck);
}
}
if(isempty_stuck(&step_stuck))/* 栈为空,则无解*/
{
printf("没有可以到达的路径\n");
}
}
运行老是出错。求帮忙。出错提示:运行出错,需要关闭。
#include<stdio.h>
#include<stdlib.h>
struct struct_step /*格子的类,*/
{
int x;
int y;
};
struct struct_step_stuck /*存放走过的路径,是一个栈类*/
{
struct struct_step step[70];
int num;
};
/*注意:最开始写的时候,下面struct struct_step_stuck形参都忘了用指针形式的了.所以入栈后也为空等等云云*/
void push_stuck(struct struct_step_stuck *step_stuck,struct struct_step step) /*将后面的格子入栈,就是加入到路径*/
{
step_stuck->step[step_stuck->num]=step;
step_stuck->num++;
}
void pop_stuck(struct struct_step_stuck *step_stuck)/*将栈顶元素出栈*/
{
step_stuck->num--;
}
int isempty_stuck(struct struct_step_stuck *step_stuck) /*判断栈是否为空*/
{
if(step_stuck->num==0)
return 1;
else
return 0;
}
struct struct_step top(struct struct_step_stuck *step_stuck)/*取栈顶元素*/
{
if(step_stuck->num==0)
{
printf("top stuck error\n");
exit(1);
}
return step_stuck->step[step_stuck->num-1];
}
int next_step_is_wall(int **a,struct struct_step cur_step,struct struct_step fx) /*下一步是否为墙*/
{
struct struct_step next_step;
int i=0;
for(i=0;i<7;i++)
printf("%d\t",a[0][i]);
if(cur_step.x+fx.x<0||cur_step.x+fx.x>7) /*是数组左右外围的墙了*/
return 1;
if(cur_step.y+fx.y<0||cur_step.y+fx.y>7) /*是数组上下外围的墙了*/
return 1;
next_step.x=cur_step.x+fx.x;/*next_step=cur_step+fx;*/
next_step.y=cur_step.y+fx.y;
if(a[next_step.x][next_step.y]==-1 || a[next_step.x][next_step.y]==1) /*下一步是数组里面的墙或走过的路径*/
return 1;
else//if(a[next_step.x][next_step.y]==0) /*是可以走的路*/
return 0;
}
void print_stuck(struct struct_step_stuck *step_stuck) /*输出栈中所胡的元素*/
{
int i;
if(step_stuck->num==0)
{
printf("there is no element in the stuck");
return;
}
/*else*/
for(i=0;i<step_stuck->num;i++)
{
printf("%d,%d%c",step_stuck->step[i].x,step_stuck->step[i].y, i==step_stuck->num?'\n':'\t');
}
}
int main()
{
struct struct_step cur_step,next_step,final_step; /*curstep为当前人所处的格子,nextstep为
下一步要走的格子*/
struct struct_step_stuck step_stuck;/*用来记录所走的路径的*/
/*格子为-1,表示是墙,格子为0表示可以走的路,格子为1表示走过的路径,左上角的0为起点,右下角的(6,0)位位置为终点*/
int a[8][8]={
0, 0, 0, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0, 0, 0,
-1,-1,-1, 0,-1, 0, 0, 0,
0, 0, 0, 0,-1, 0,-1,-1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,-1, 0,-1, 0,
0, 0, 0,-1, 0,-1, 0, 0
};
int i;
struct struct_step fangxiang[4]={ {0,1},{1,0},{0,-1},{-1,0} };/*方向:东,南,西,北.*/
cur_step.x=0,cur_step.y=0; /*cur_step={0,0}*/
final_step.x=7,final_step.y=6;/*final_step={7,6}; */ /*假设是从{0,0}走到{7,6}这个出口*/
step_stuck.num=0; /*初始化栈*/
push_stuck(&step_stuck,cur_step); /*将{0,0}入栈*/
print_stuck(&step_stuck);
printf("%d\n",isempty_stuck(&step_stuck));
while(!isempty_stuck(&step_stuck))
{
for(i=0;i<4;i++)
{
if(next_step_is_wall(a,cur_step,fangxiang[i])) /*如果这个方向下一格子为墙或是不能走的路的话,则判断下一个方向*/
continue;
/*下一步不为墙,是可以走的路*/
next_step.x=cur_step.x+fangxiang[i].x;/*next_step=cur_step+fangxiang[i];*/
next_step.y=cur_step.y+fangxiang[i].y;
push_stuck(&step_stuck,next_step); /*将下一格子入栈*/
cur_step=top(&step_stuck); /*当前位置设为栈顶元素,就是最后走的那步*/
/*如果栈顶元素为出路的话,则输出路径,任务完成了并结束程序*/
if(cur_step.x==final_step.x&&cur_step.y==final_step.y)/*cur_step==final_step*/
{
print_stuck(&step_stuck);
exit(0);
}
break;/*不是出路则判断下一个格子,注意不是下一个方向*/
}
if(i==4) /*4个方向里,如果除了前一步的其它三个方向都不能走的话.将当前步标记为墙,并出栈*/
{
cur_step=top(&step_stuck);
a[cur_step.x][cur_step.y]=-1;/*标记为墙*/
pop_stuck(&step_stuck);
}
}
if(isempty_stuck(&step_stuck))/* 栈为空,则无解*/
{
printf("没有可以到达的路径\n");
}
}