我无法搞清楚如何解析文本文件导入Python中的图表。该文件采用以下格式:分析曲线图(蟒蛇)
4 4
o . o . o . o
- - . -
o . o . o | o
. - . .
o | o . o . o
. - . -
o . o . o . o
顶部的整数是维(行,列)。我需要考虑每个角色之间的空间。这是假设代表一个迷宫,我就必须运行搜索,以确定给定起点和终点的最优路径。我已经想出了这部分。我只需要帮助解析这个文本文件到一个图表,所以我可以运行搜索。
我无法搞清楚如何解析文本文件导入Python中的图表。该文件采用以下格式:分析曲线图(蟒蛇)
4 4
o . o . o . o
- - . -
o . o . o | o
. - . .
o | o . o . o
. - . -
o . o . o . o
顶部的整数是维(行,列)。我需要考虑每个角色之间的空间。这是假设代表一个迷宫,我就必须运行搜索,以确定给定起点和终点的最优路径。我已经想出了这部分。我只需要帮助解析这个文本文件到一个图表,所以我可以运行搜索。
本函数解析等你给到一组节点(存储为一对在原始网格坐标的)中的一个,和边缘的一个字典(每个节点映射到那些节点的列表的网格毗邻它)。这是一个非常易于使用的图形表示,您应该可以毫无困难地使用它来编写迷宫搜索。该代码使用迷宫的结构仅由边缘( - 和|)描述的想法,并且网格是水平和垂直双线间隔的。没有任何边缘的正方形不会出现在图形中。
import collections
def parse_grid(grid):
edges = collections.defaultdict(list)
for i in xrange(len(grid)):
for j in xrange(len(grid[i])):
if grid[i][j] == '-':
edges[i, j - 2].append((i, j + 2))
edges[i, j + 2].append((i, j - 2))
if grid[i][j] == '|':
edges[i - 2, j].append((i + 2,j))
edges[i + 2, j].append((i - 2,j))
nodes = set()
for e in edges.iterkeys():
nodes.add(e)
return nodes, edges
grid = """\
o . o . o . o
- - . -
o . o . o | o
. - . .
o | o . o . o
. - . -
o . o . o . o"""
print parse_grid(grid.split('\n'))
我基本上编码相同,并张贴...然后页面刷新,我看到你在我面前做了...没有其他机会,删除我的并upvote你的! ;) – mac
该实现将取决于您想如何在Python中表示图形。
我创建一个边列表
edgelist = []
y=0
for line in file:
chars = [char for char in line.split(" ") if len(char)]
x = 0
if ('|' in chars):
y+=1
for char in chars:
if char == 'o'
x+=1
elif char == '.'
edgelist.append([(x,y),(x+1,y)])
else:
for char in chars:
x+=1
if char == '.'
edges.append([(y,x),(y,x+1))
这应该工作,但是我没有带测试它,但要做到这一点了。
"""
maze1.txt
4 4
o . o . o . o
- - . -
o . o . o | o
. - . .
o | o . o . o
. - . -
o . o . o . o
"""
readfile = open('maze1.txt', 'r')
line = readfile.readline()
rowcount, colcount = [int(elem) for elem in line.strip().split(' ')]
rights = []
downs = []
chars = ('o', ' ', '.', '-', '|', '')
translated = ('o', ' ', '.', '-', '|', '') # if needed, could be int or method
while line:
line = readfile.readline()
if chars[0] in line:
for elem in line.strip().split(chars[0])[1:]:
rights.append(translated[chars.index(elem.strip())])
else:
for elem in line.strip().split(chars[1])[:colcount]:
downs.append(translated[chars.index(elem.strip())])
readfile.close()
for i, elem in enumerate(rights):
print elem, divmod(i, colcount)
print "##"
for i, elem in enumerate(downs):
print elem, divmod(i, colcount)
你是指通过解析为[“图形”](http://en.wikipedia.org/wiki/Graph_%28data_structure%29)而具体指什么? Python中是否有“图形”内置类型? (我没有定义'name'图表')。它是否是您创建的一些自定义类型?或者你有没有任何具体的想法,你想我们建议一个合适的代表? –