这段时间微信有个小游戏叫《一笔画完》很火,在朋友推荐我玩了之后,我发现这其实就是所谓的欧拉图的简化板,我们要做的就是找出欧拉路径,游戏中起点已经定好,而且可以保证是欧拉图,如果不是的话也就没法一笔画完了,本着学以致用,边学边玩的目的,我决定自己动手用python实现一下这个算法
欧拉图的基础知识我就不在这介绍了,直接上代码
#自己先杜撰一组测试数据
data=[[0,1,1,1],
[2,1,1,1],
[2,1,2,2],
[1,1,1,1],
[1,2,2,1],
[1,1,1,1]]
# 0表示起点,1表示可以走的路径,2表示不可以走的路径
ways=[]
def dfs(data,row,i,ways):
# a=[1,-1]
data[row][i]=3 #这里置为3表示已经这个点已经走过
if row+1<len(data) and data[row+1][i]==1:
if not dfs(data,row+1,i,ways):
data[row+1][i]=1
if row-1>-1 and data[row-1][i]==1:
if not dfs(data,row-1,i,ways):
data[row-1][i]=1
if i+1< len(data[0])and data[row][i+1]==1:
if not dfs(data,row,i+1,ways):
data[row][i+1]=1
if i-1 >-1 and data[row][i-1]==1:
if not dfs(data,row,i-1,ways):
data[row][i-1]=1
for row1 in data:
for i1 in row1:
if(i1==1):
return False
ways.append((row,i))
return True
for row in data:
for i in row:
if i==0:
dfs(data,data.index(row),row.index(i),ways)
print(ways)
这样就完成了欧拉路径的寻找,本质上就是一个深度优先搜索,这里的输入数据不是普通欧拉图的边的关系映射了,而是更类似实际游戏中展现给我们那个地图了。后续会出实现使用脚本模拟跑小游戏的方法,有问题欢迎大家评论区交流。