C:勇敢羊羊不怕困难!2022-2023年度第四届全国大学生算法设计与编程挑战赛(秋季赛)之羊驼

博客介绍了如何利用C语言编写递归算法解决编程挑战赛中的羊驼寻路问题。通过分析题目,设计程序流程,包括信息输入、递归函数实现,并给出完整代码。在递归函数中,通过试探法寻找最短路径,避免陷阱,最终输出最短步数。
摘要由CSDN通过智能技术生成

目录

题目分析

程序设计

总体流程

信息输入

递归函数

完整代码

代码分析

题目分析

问题描述如图:

 利用函数迭代,找出能走到出口的每一条路,取路径最短的路线。

程序设计

总体流程

  • 输入相应的地图信息。
  • 从初始位置开始,向四个方向试探(不超出边界)。
  • 若试探位置没有陷阱,以该位置作为新的起始点重复流程(应该把来路设置为有陷阱避免反复横跳)。
  • 若试探位置有陷阱,换个方向进行试探。
  • 位于死胡同时(各个方向均无路可走),返回上一步所在位置,试探该位置的其他方向。
  • 走到终点时,记录所用步数,与历史最少步数比较,保留最小值。退后若干步试探新的路线。
  • 将所有走法试探一遍后,结束试探,输出最小步数。

信息输入

为方便递归函数调用,将地图基本信息声明为全局变量:

#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()函数接收键入的数据时&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值