# -*- coding: utf-8 -*-
# @Time : 2017/8/10 上午9:42
# @Author : Qi MO
# @File : BFS.py
# @Software: PyCharm Community Edition
level_file_path = '../数据/level_file.txt'
class GameShortest:
def __init__(self,line, col=10):
"""
给一个图,长度为100的字符串表示。
0空地 1墙 2箱子起始位置 3箱子终点位置 4人的起始位置
:param line: 地图,用字符串表示。如代码最后的每一行表示每一关的地图。
:param col: 地图的长宽,由于设定为10*10,默认为10
"""
self.line = line
# sta和en 表示开始的状态,结束的状态
# sta只有2,4,0 2表示箱子开始位置,4表示人的位置,0表示其他。
# en只有1,3,0 1表示墙,3表示箱子结束位置,0表示其他。
# 现在只需要把sta状态中的2位置移动到en的3的位置即满足条件
self.sta = ''
self.en = ''
self.col = col
# px, py表示4的位置
self.px,self.py = -1,-1
# paths记录最短路径(可能有多条)
self.paths = [] # len记录最短路径长度 如
self.len = -1
self.pre()
self.BFS()
print(self.paths)
def pre(self):
"""
1.获得sta开始状态和en结束状态
2.获得人的起始位置px,py
代码最后的第一关的地图可视化为
1111111111
1111111111
1110001111
1110221111
1114201111
1111100111
1111300111
1113300111
1111111111
1111111111
:return:
"""
mp = [] for pos in range(0, 100, 10):
mp.append(self.line[pos:pos + 10])
# print(self.line)
# for x in mp:
# print(x)
for pos, enum in enumerate(self.line):
cx, cy = pos // 10, pos % 10
if enum == '4':
self.px, self.py = cx, cy
# 现在只需要把sta开始的状态中的2位置移动到en的3的位置即满足条件
staDic = {'0': '0', '1': '0', '2': '2', '3': '0', '4': '4'}
enDic = {'0': '0', '1': '1', '2': '0', '3': '3', '4': '0'}
for x in self.line:
self.sta += staDic[x] self.en += enDic[x] # print(self.sta)