2401_82759218 2024-01-27 13:05 采纳率: 85.7%
浏览 7
已结题

if里面递归判断表达式

img


这里判断的map[i][j]=0啊,为什么会执行这个呀?什么情况下会跳到下一个else if啊

img

  • 写回答

1条回答 默认 最新

  • Norcor 2024-01-27 14:40
    关注

    给的代码不全,看起来有点累。。。
    目前来看应该是有个8*7的迷宫,其中0表示可以走,1表示是墙,无法穿过。
    你给出的程序段的实现方式是这样的:
    ①:对起点进行**findway()**函数(显然,起点必定是可走的)
    ②:然后,以该点为基准,对上下左右四个方向进行遍历,寻找可走的节点。
    ③:如果上下左右存在节点的map[i][j]为1,那就返回false,表示这个方向的寻找失败了,此路不通。<这条语句应该是你没截上来的,但一定在if(map[i][j] == 0)那条语句同一层,判断map[i][j]的值为1>
    ④:如果上下左右存在节点的map[i][j]为0,那就返回true(这小句划掉),应该是那就将这个节点的值赋为2,并可以继续以这个节点为基准,进行递归,进行findway(),也就是回到了②。
    ⑤:如果上下左右存在节点的map[i][j]为2,那就说明这个节点在之前的节点的遍历中寻找过了,显然,也就不必要继续查询了。
    ⑥:对所有可以走的节点和这些节点的相连节点,执行完②③④⑤几个操作,就已经将整个迷宫里所有可以走的路径均跑过了。这个时候再回头看第一个if语句,判断map[7][6]==2,如果终点的值变成了2,那就说明有一条路线走到了终点。这时终点的前一个节点的findway返回了true,该节点的前一个节点也就返回了true,这样一层层找回去,最后在起点所在的节点的findway(没错,这个findway就是①里加粗的那次调用的findway)得到了true的返回值,即找到了起点到终点的路线。反之,如果所有节点均尝试完,依旧没有让map[7][6]==2,那就失败了,也就是没有一条这样的路径。
    这个时候再回到你的问题:
    这个程序里的0和1是对map[7][6]这个地图里的值,0是路,1是墙,所以0可以走,1挡住了,走不了。
    而true是findway成功的意思,0是findway失败的意思。对一个节点而言,只要有一个方向可以走到终点(其实还要求这个方向的下一个节点还没有被其他路径走过),那这个节点就是true,因为它就可以走到终点;而如果它所以方向均无法到达终点,那这个节点就返回false,这个节点,以及这个节点之前的那些节点与对应方向的这条路径就到达不了终点。当起点所在的节点的几个方向均无法到达终点时,迷宫就无解了。

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 专家已采纳回答 2月11日
  • 创建了问题 1月27日

悬赏问题

  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数