解题思路:
很明显用广搜就能解决。
参考代码:
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语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:553 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:443 |
简单的a+b (C++语言代码)浏览:895 |
求组合数 (C语言代码)浏览:1206 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:2121 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:756 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:569 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:1108 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:585 |
C语言训练-最大数问题 (C语言代码)浏览:668 |