python實現歐拉路徑查找算法與微信小遊戲《一筆畫完》(一)

   這段時間微信有個小遊戲叫《一筆畫完》很火,在朋友推薦我玩了之後,我發現這其實就是所謂的歐拉圖的簡化板,我們要做的就是找出歐拉路徑,遊戲中起點已經定好,而且可以保證是歐拉圖,如果不是的話也就沒法一筆畫完了,本着學以致用,邊學邊玩的目的,我決定自己動手用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)
            

這樣就完成了歐拉路徑的尋找,本質上就是一個深度優先搜索,這裏的輸入數據不是普通歐拉圖的邊的關係映射了,而是更類似實際遊戲中展現給我們那個地圖了。後續會出實現使用腳本模擬跑小遊戲的方法,有問題歡迎大家評論區交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章