什麼是數的全排列呢?這裡舉個例子:123的全排列是123,132,213,231,312,321。
那麼接下來,我們用程式來實現輸出1~n的全排列。
解決思路1:使用列舉法,嘗試所有的可能性
源**:
#include #include #define n 100
int a[n];
int n = 4;
int m;
int sum = 0;
int book[n] = ;
void fun(int k)
for(int j = 1; j <= n; j++)
sum = 0;
for(int j = 1; j <= n; j++)
if(sum == n)}}
}int main(int argc, char* argv)
解決思路2:使用深度優先搜尋,避免無效的組合源**:
#include #include #define n 100
int a[n];
int n = 4;
int m;
int sum = 0;
int book[n] = ;
void fun(int k)
else
continue;
if(k != 1)
fun(k - 1);
else
}//清除最後一次的標記。
book[a[k]] = 0;
//這一輪結束,要把數字也清零
a[k] = 0;
}int main(int argc, char* argv)
下面是兩種演算法的執行結果(這裡我注釋掉了所有情況的輸出):
從上面截圖可以很清楚看出來,兩個演算法差距非常大。
C 編寫數的全排列
數字123的全排列,應用深度優先搜尋原理 includeusing namespace std int a 4 book 4 void permulation int step cout endl return for int i 1 i 3 i return int main 輸出 1 2 3 1...
方格填數 (全排列)
填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。思路 全排列0 9,判斷是否相鄰,若為相鄰則兩數之差的絕對值為1 include include incl...
全排列 方格填數
問題描述 如下的10個格仔 如下的10個格仔 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請輸出表示方案數目的整數。注意 你輸出的應該是乙個整數,不要輸出任何多餘的內容或說明性文字。輸入沒有輸入。輸出輸出乙個整數,即可能的填數方案數。題目限制...