#16208: C版本,參考


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
a524. 手機之謎 | From: [27.52.77.116] | 發表日期 : 2018-12-06 20:02

原理:運用遞迴以及堆疊,我是想成有  n  個點的無向圖,所有頂點皆與其他頂點互相連接,

從某一點開始走,由大到小依序走過每一點,運用深度優先搜尋 DFS

用C來寫其實不容易,而且不能貼原始碼,所以以下為程式的虛擬碼:

 

(全域變數)  堆疊[]={0}; 該點是否走訪的標記陣列[]={0}; (0表示未走訪)

void   不重複排列( int   i (目前的位置),    int  (所有點的個數) )

{

int    j=0 ;  /* 要走訪的下一點 */

將 點紀錄為 已走訪

將 點存入堆疊;

while ( j<n )   /* 從第一個點走到最後一個 */

{

如果  j  點還沒走訪過

遞迴呼叫;

j++;

}

如果堆疊中存有所有走訪過的點

印出結果

彈出堆疊中的一個點;

將 點紀錄為 未走訪

}

 

在 main 中,i 點就是起始點,所以要用迴圈跑每一個點

如果有更快更簡單更好的方法,歡迎分享~~~~

 
ZeroJudge Forum