我已经从java程序转换了以下代码块。如何使用他们的姓名而不是他们的ID来写Map
中国家/地区的名称?
from collections import defaultdict
colors = ['Red', 'Yellow', 'Green', 'Blue']
mapColors = defaultdict(str)
def okToColor(Map ,country, color):
for c in Map[country]:
if mapColors[c] == color: return False
return True
def explore(Map, country, color):
if country >= len(Map): return True
if okToColor(Map, country, color):
mapColors[country] = color
for color in colors:
if explore(Map, country + 1, color): return True
return False
def printMap():
for c in mapColors:
print c, mapColors[c]
Map = [[1, 4, 2, 5], [0, 4, 6, 5], [0, 4, 3, 6, 5], [2, 4, 6],
[0, 1, 6, 3, 2], [2, 6, 1, 0], [2, 3, 4, 1, 5]]
result = explore(Map, 0, 'Red')
print result
printMap()
我希望地图不是这样的图形:
Map = { 'A':['B', 'C'], 'B':['A','D'], ...}
其中A,B,C,D是国家/地区的名称。
答案 0 :(得分:2)
主要思想是定义countries
和数字索引之间的映射:
countries = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
cindex = dict(zip(countries, range(len(countries))))
# {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6}
然后,只需很少的更改,您就可以使用原始代码。在country
之前是数字索引的位置,现在在需要数字索引时放置cindex[country]
。
当您需要撤消映射时,countries[index]
会为您提供该国家/地区的字符串名称。
from collections import defaultdict
colors = ['Red', 'Yellow', 'Green', 'Blue']
mapColors = defaultdict(str)
def okToColor(Map, country, color):
for c in Map[country]:
if mapColors[c] == color:
return False
return True
def explore(Map, country, color):
if cindex[country] >= len(Map):
return True
if okToColor(Map, country, color):
mapColors[country] = color
for color in colors:
try:
next_country = countries[cindex[country] + 1]
except IndexError:
return True
if explore(Map, next_country, color):
return True
return False
def printMap():
for c in mapColors:
print c, mapColors[c]
countries = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
cindex = dict(zip(countries, range(len(countries))))
Map = [[1, 4, 2, 5], [0, 4, 6, 5], [0, 4, 3, 6, 5], [2, 4, 6],
[0, 1, 6, 3, 2], [2, 6, 1, 0], [2, 3, 4, 1, 5]]
Map = {countries[idx]: [countries[n] for n in item] for idx,
item in enumerate(Map)}
result = explore(Map, 'A', 'Red')
print(result)
printMap()
产量
True
A Red
C Yellow
B Yellow
E Green
D Red
G Blue
F Green