首页 > 其他分享 >HJ43_迷宫问题_回溯

HJ43_迷宫问题_回溯

时间:2023-03-24 18:25:01浏览次数:27  
标签:探索 tuple track list 迷宫 pos HJ43 回溯

¥问题:探索沿着0路径走出矩阵迷宫。

¥思路:

1、第一个站位点为(0,0)坐标,站在(0,0)坐标向分别向左右上下探索,如探索到1则回溯重新探索0路径。

2、比如向右走几步后,检测到了右上下都是1,此时回溯。注意在探索过程中,有可能探索重复的死胡同,所以需要用pos list记录探索过的左边,探索重新探索。

3、在探索过程中有可能迭代超出边界,因此需要对边界左边进行界定和判断。

¥几大注意点:

1、自定义函数track中,采用了5个if判断,不能错用if,elif,否则在回溯过程,跳过分支探索,无法继续探索,导致程序出错。

¥奇怪的报错:

1、在测试过程一直报下图错误,(但是很确定,两个大小对比都是int类型没有tuple类型,只能一行行地替换查找,最后发现问题所在,但依然不知道问题原因)。把原来第一个if判断放在最后一个,或者把输出的for循环改成k就不再出现类型报错。!!原因是什么?

2、tuple的创建。如,a=【(1,2),(3,4)】创建tuple列表,tuple的逗号后无空格,但是输出时,tuple的逗号后有空格。所以一字符串的方式重新整理输出格式。

 

 

 

 

 

 

 

 1 import sys
 2 m,n=list(map(int,sys.stdin.readline().strip().split()))
 3 l=[]
 4 for i in sys.stdin:
 5     l.append(list(map(int,i.strip().split())))
 6 #探索路径,往下、往右、往左、往上
 7 pos=[(0,0)]
 8 def track(i,j,pos):
 9     if i<m-1 and l[i+1][j] == 0:#向下
10         if (i+1,j) not in pos:
11             track(i+1,j,pos+[(i+1,j)])
12     if j < n-1 and l[i][j+1]==0:#向右
13         if (i,j+1) not in pos:
14             track(i,j+1,pos+[(i,j+1)])
15     if j>0 and l[i][j-1]==0:#向左
16         if (i,j-1) not in pos:
17             track(i,j-1,pos+[(i,j-1)])
18     if i>0 and l[i-1][j]==0:#向上
19         if (i-1,j) not in pos:
20             track(i-1,j,pos+[(i-1,j)])
21     if i==m-1 and j==n-1:
22         for i in pos:
23             #print(i)
24             print("("+str(i[0])+","+str(i[1])+")")
25     return
26 track(0,0,pos)

 

标签:探索,tuple,track,list,迷宫,pos,HJ43,回溯
From: https://www.cnblogs.com/tanyuanqing/p/17252978.html

相关文章

  • 迷宫2
    题意样例输入:332000010000333111样例输出:6数据范围:对于10%的数据,N,M<=4,K<=1。对于30%的数据,N,M<=10。对于60%的数据,N,M<=100。对于100%的数据,N......
  • 迷宫1
    bfs最短路径有几条题意样例输入:4...S.XX..XX.E...样例输出:62数据范围:1≤n≤25解析path数组记录点代码#include<bits/stdc++.h>usingnamespacestd;......
  • 蓝桥杯之迷宫
    蓝桥杯题解迷宫下图给出了一个迷宫的平面图,其中标记为11的为障碍,标记为00的为可以通行的地方。010000000100001001110000迷宫的入口为左上角,出口为右下角,在迷......
  • 迷宫
    迷宫-蓝桥云课(lanqiao.cn)publicclassN602{ staticchar[][]m=newchar[30][50]; staticchar[]d={'D','L','R','U'};//定义这个顺序为字典序答案就......
  • 迷宫问题之bfs
    先来一道简单的迷宫模板题迷宫由n行m列的单元格组成,每个单元格要么是空地,要么是障碍物。其中1表示空地,可以走通,2表示障碍物。输出从左上角到右下角的最短路径长度。......
  • 递归与回溯法
    递归 引入什么是递归?先看大家都熟悉的一个民间故事:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说,从前有座山,山上有座庙,庙里有一个老和尚在给小......
  • bfs走迷宫
      #include<iostream>#include<cstring>#include<queue>constintN=110;intn,m;typedefpair<int,int>PII;intg[N][N];//存图intd[N][N];//记录距离PIIq......
  • 基于形态学处理算法的迷宫路线搜索matlab仿真
    1.算法描述形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如......
  • 基于形态学处理算法的迷宫路线搜索matlab仿真
    1.算法描述       形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本......
  • 回溯算法解决排列—组合—子集问题
    回溯算法解决排列—组合—子集问题无论是排列、组合还是子集问题,就是让你从序列nums中以给定规则取若干元素,主要有以下几种变体:元素无重不可复选,即nums中的元素都......