一筆畫完C語言程式尋找路徑演算法

2021-10-02 11:58:32 字數 1661 閱讀 9127

過年這幾天疫情嚴重,哈哈,想必各位在家也是閒得慌。

於是,玩了一款叫 「一筆畫完」 的遊戲打發時間,要求從起點一筆連線所有格仔,不能重複,不能空格。

有些關卡還真是意想不到,於是想到能不能用計算機去幫我找路徑,間接「開掛」,哈哈。

遊戲介面截圖如下:(其中乙個關卡,用來測試程式)

廢話不多說,來看**:(vc++6.0寫的)

**說明:程式比較短,但實測是可以用的,還未發現不能通關的。主要利用的是窮舉法。難度等級預設是6,如果超過了這個難度的可以更改#define l後面的值,上限127,因為定義的行列是char型。這裡還用到了setjmp();跳轉,與goto不同的是,setjmp();可實現函式間的跳轉(具體使用方法其他部落格上有,我就不說明了哈)。

#include

#include

//用於setjmp跳轉的標頭檔案

#define l 6

//初始化行列數,上限127

char i,j,p;

//p用於記錄路徑步數

jmp_buf buf;

unsigned

char

check()

;void next_step (

char

,char);

/******路徑迷宮,0:空白 1:待連路徑 2:起點*******/

unsigned

char a[l]

[l]=

;void

main()

printf

("\n");

for(i=

0;i<

43;i++

)printf

("-");

printf

("\n共計 %d 步 (路徑從小到大)\n\n"

,p);

}unsigned

char

check()

void

next_step

(char i,

char j)

使用說明:把關卡轉變成6*6陣列,輸入到二維陣列a中。0表示沒有方塊的地方,1表示要連線的方塊,2表示起點。使用時把關卡轉換成陣列,執行就行了,拿上圖來舉例:

像這樣,錄入陣列a中(沒有的地方用0補齊):

執行結果(以2為起點,從小到大連線就是我們要的路徑):

知道路徑後,我們再返回關卡,連線起來就ok了,哈哈

總結:純屬無聊,練練c語言程式設計罷了,程式比較簡單,前期錄入陣列的時候操作比較繁瑣,後續有時間看看能不能做影象識別哈哈。(已經有其他博主用其他語言寫了類似演算法,都很不錯)

尤拉路徑 一筆畫問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫乙個程式,判斷乙個圖是否能夠用一筆畫下來。規定,所有的邊都只能畫一次,不能重複畫。輸入 第一行只有乙個正整數n n 10 表示測試資料的組數。每組測試資料的第一...

一筆畫問題的c 實現

一筆畫問題,即尤拉迴路問題,最近在演算法課上老師留了這個作業,下面將我的實現說一下。首先,先將問題描述一下。img 該圖中節點編號從上至下,從左至右編號如下 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 要求 從節點1開始,一筆將該圖形畫出。首先講下該題的大概思路 概括...

尤拉迴路判定演算法 一筆畫問題

如果圖中的一條路經經過每條邊一次,則該路徑稱為尤拉路徑。如果該路徑正好是乙個迴路,即從起點出發又回到起點,則該路徑稱為尤拉迴路。如果乙個圖有尤拉迴路,則該圖稱為尤拉圖。無向圖存在尤拉迴路的充要條件 乙個無向圖存在尤拉迴路,當且僅當該圖所有頂點度數都為偶數,且該圖是連通圖。無向圖存在尤拉路徑的充要條件...