數的全排列

2021-07-03 16:15:56 字數 1087 閱讀 3869

什麼是數的全排列呢?這裡舉個例子: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的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請輸出表示方案數目的整數。注意 你輸出的應該是乙個整數,不要輸出任何多餘的內容或說明性文字。輸入沒有輸入。輸出輸出乙個整數,即可能的填數方案數。題目限制...