過年這幾天疫情嚴重,哈哈,想必各位在家也是閒得慌。
於是,玩了一款叫 「一筆畫完」 的遊戲打發時間,要求從起點一筆連線所有格仔,不能重複,不能空格。
有些關卡還真是意想不到,於是想到能不能用計算機去幫我找路徑,間接「開掛」,哈哈。
遊戲介面截圖如下:(其中乙個關卡,用來測試程式)
廢話不多說,來看**:(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開始,一筆將該圖形畫出。首先講下該題的大概思路 概括...
尤拉迴路判定演算法 一筆畫問題
如果圖中的一條路經經過每條邊一次,則該路徑稱為尤拉路徑。如果該路徑正好是乙個迴路,即從起點出發又回到起點,則該路徑稱為尤拉迴路。如果乙個圖有尤拉迴路,則該圖稱為尤拉圖。無向圖存在尤拉迴路的充要條件 乙個無向圖存在尤拉迴路,當且僅當該圖所有頂點度數都為偶數,且該圖是連通圖。無向圖存在尤拉路徑的充要條件...