关于路径逆序的输出办法

在算法竞赛的图论问题中,在求最短路径等的问题时,我们经常是逆序的存放路径的,因此在最后输出路径时极为不便。
以下采用递归形式的遍历方法,可以很好地解决这一痛点
首先我们在主函数中把终点作为参数直接传入

PrintPath(target);

在输出路径的同时,考虑到了输出格式的问题

void PrintPath(int v) {
    if (v == start) {
        printf("%d", v);
        return;
    }
    PrintPath(path[v]);
    printf(" %d", v);
}

请编写函数,接收用户输入的地形信息和所在坐标,输出每一步的移动过程。地形信息是一个 9∗9 的矩阵,其中只有数字1(通道)和0 (障碍)。0 所在的位置不能通行。本题规定,整个矩阵最外层一圈仅有一个数字1 ,代表楼梯口,最外圈其余数字均为数字0 ,下面是一个地形信息的例子,其中楼梯口在 (1,8) 位置。 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 假设用户输入其坐标为 (5,1) ,那么程序应当输出其移动路径为: 5,1 5,2 5,3 5,4 5,5 4,5 3,5 2,5 2,6 2,7 1,7 1,8 本题有以下规定: ① 本题不需要考虑多条路径,即假设在不走重复位置的情况下,所有地形的移动路径都是唯一的。 ② 本题假设一定有路径,即不会出现无法达到出口的情况。 提示: ① 本题可以使用递归实现,并将已经走过的路径标注为0 ,防止死循环。 ② 本题需要输出移动路径,如何在不使用数组存储路径的情况下输出正确的路径?本题建议你不使用数组存储路径,而是思考如何直接在递归函数中进行输出,这样可以锻炼你的思维。 输入内容共两部分: ① 一个 9∗9 的矩阵,代表地形信息。矩阵元素为0或1 ② 两个整数 a,b ,代表起始坐标。其取值范围为 0<a,b<8。不需要考虑非法输入。 输出格式说明 按照上面的格式输出若干行移动路径。 请严格按照要求格式输出,不要添加输入/输出提示。 测试样例 输入: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 2 3 输出: 2,3 3,3 3,2 3,1 4,1 5,1 5,2 5,3 5,4 5,5 4,5 3,5 2,5 2,6 2,7 1,7 1,8
05-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeSlogan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值