目录
题目分析
问题描述如图:
利用函数迭代,找出能走到出口的每一条路,取路径最短的路线。
程序设计
总体流程
- 输入相应的地图信息。
- 从初始位置开始,向四个方向试探(不超出边界)。
- 若试探位置没有陷阱,以该位置作为新的起始点重复流程(应该把来路设置为有陷阱避免反复横跳)。
- 若试探位置有陷阱,换个方向进行试探。
- 位于死胡同时(各个方向均无路可走),返回上一步所在位置,试探该位置的其他方向。
- 走到终点时,记录所用步数,与历史最少步数比较,保留最小值。退后若干步试探新的路线。
- 将所有走法试探一遍后,结束试探,输出最小步数。
信息输入
为方便递归函数调用,将地图基本信息声明为全局变量:
#include<stdio.h>
int n,m,a,b,x,y;
在试探的函数递归中将不断用到其中某些数据而不更改其值,将其定义为全局变量可以减少程序运行时间和内存占用。
在主函数中输入数据:
int main(){
scanf("%d %d",&n,&m);
scanf("%d %d %d %d",&a,&b,&x,&y);
a--;b--,x--,y--;//行列标号变为数组索引
int map[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&map[i][j]);
}
}
/*计算部分*/
/*结果输出部分*/
}
输入的起点、终点坐标是序号值,输入后转化为索引值便于后续使用。根据输入的尺寸声明地图数组map并分配空间,使用嵌套循环依次输入陷阱分布。
在使用scanf()函数接收键入的数据时&