您的当前位置:首页正文

python实现欧拉路径查找算法与微信小游戏《一笔画完》(一)

2024-11-10 来源:个人技术集锦

   这段时间微信有个小游戏叫《一笔画完》很火,在朋友推荐我玩了之后,我发现这其实就是所谓的欧拉图的简化板,我们要做的就是找出欧拉路径,游戏中起点已经定好,而且可以保证是欧拉图,如果不是的话也就没法一笔画完了,本着学以致用,边学边玩的目的,我决定自己动手用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)
            

这样就完成了欧拉路径的寻找,本质上就是一个深度优先搜索,这里的输入数据不是普通欧拉图的边的关系映射了,而是更类似实际游戏中展现给我们那个地图了。后续会出实现使用脚本模拟跑小游戏的方法,有问题欢迎大家评论区交流。

显示全文