原题链接:蓝桥杯2015年第六届真题-穿越雷区
解题思路:
很明显用广搜就能解决。
参考代码:
n = int(input())
#模拟地图
mMap = [list(input().split()) for _ in range(n)]
#标记是否访问过、访问过为True未访问过为False
mVis = [[False for _ in range(n)] for _ in range(n) ]
mVis[0][0] = True
#模拟在图中上下左右走
xMove = [-1,1,0,0]
yMove = [0,0,1,-1]
#队列记录坐标和走到的次数
queue = [[0,0,0]]
while queue:
#当走到了b点退出广搜、打印走的次数
if mMap[queue[0][0]][queue[0][1]] == 'B':
print(queue[0][2])
break
for i in range(4):
dx = queue[0][0] + xMove[i]
dy = queue[0][1] + yMove[i]
if dx>=0 and dx<=n-1 and dy>=0 and dy<=n-1:
if not mVis[dx][dy] and mMap[queue[0][0]][queue[0][1]] != mMap[dx][dy]:
'''没有访问过并且不是连续的走-和+就可以将点加入队列'''
queue.append([dx,dy,queue[0][2]+1])
mVis[dx][dy] = True
queue.pop(0)
if len(queue) == 0:
"""队列为空说明走不到B点"""
print("-1")0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复