原题链接:蓝桥杯算法提高VIP-学霸的迷宫
解题思路:
bfs找路径 不同的是路过一个点,不是像往常那样,把visited[x][y]记为1,而是记下怎么到的这个点,如1,2前进到1,3 。那么是往右一个单位,记下R,从而记录路径
]注意事项:
这题很坑的是 有时候最短路径有很多可能,但是官方答案只认其中一种,官方答案要求的前进顺序是 下左右上。。。这里卡了好久
参考代码:
def bfs(mazelst,row,col): visited=[[0 for i in range(col)] for j in range(row)] #print(visited) #slst=getS(mazelst,row,col) visited[0][0]=1 mq=[] mq.append([0,0]) chg=[[1,0],[0,-1],[0,1],[-1,0]] chgw=['D','L','R','U'] length=0 row=len(mazelst) col=len(mazelst[0]) while mq: tmp=[] length+=1 while mq: a=mq.pop(0) #judge in maze for i in range(len(chg)): nr=a[0]+chg[i][0] nc=a[1]+chg[i][1] if nr==row-1 and nc==col-1: visited[nr][nc]=chgw[i] #print(visited) a="" while not(nr==0 and nc==0): a+=visited[nr][nc] #print(visited[nr][nc]) t=chgw.index(visited[nr][nc]) nr=nr-chg[t][0] nc=nc-chg[t][1] #a+=visited[nr][nc] print(length) print(a[::-1]) return length else: if nr>=0 and nr<row and nc>=0 and nc<col: if mazelst[nr][nc]==0 and visited[nr][nc]==0: tmp.append([nr,nc]) visited[nr][nc]=chgw[i] mq=tmp.copy() return -1 randc=list(map(int,input().split())) mazelst=[] for i in range(randc[0]): nowR=list(map(int,input())) mazelst.append(nowR) a=bfs(mazelst,randc[0],randc[1])
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复