原理:運用遞迴以及堆疊,我是想成有 n 個點的無向圖,所有頂點皆與其他頂點互相連接,
從某一點開始走,由大到小依序走過每一點,運用深度優先搜尋 DFS
用C來寫其實不容易,而且不能貼原始碼,所以以下為程式的虛擬碼:
(全域變數) 堆疊[]={0}; 該點是否走訪的標記陣列[]={0}; (0表示未走訪)
void 不重複排列( int i (目前的位置), int n (所有點的個數) )
{
int j=0 ; /* 要走訪的下一點 */
將 i 點紀錄為 已走訪;
將 i 點存入堆疊;
while ( j<n ) /* 從第一個點走到最後一個 */
{
如果 j 點還沒走訪過
遞迴呼叫;
j++;
}
如果堆疊中存有所有走訪過的點
印出結果
彈出堆疊中的一個點;
將 i 點紀錄為 未走訪;
}
在 main 中,i 點就是起始點,所以要用迴圈跑每一個點
如果有更快更簡單更好的方法,歡迎分享~~~~