1 ~ n 的全排列的個數
阿新 • • 發佈:2019-02-17
拿輸入3為例子,首先要從1開始一個一個搜尋,輸出一遍開始回溯,即123輸出之後開始回溯,a【i】重新賦值標記的為0,a【i-1】也為0,由於for的迴圈,所以結束,輸出132,同樣回溯的過程也會回溯到第一個數,就是213,同理迴圈下去,直到回溯完輸出完程式繼續輸入想排的個數。
#include<cstdio> #include<cstring> using namespace std; int a[10],vis[10],n; // 存數陣列,標記陣列,幾位數 void dfs(int step) { if(step == n + 1 ) //排一遍輸出 { for(int i = 1 ; i <= n ; i ++) printf("%d",a[i]); printf("\n"); } for(int i = 1 ; i <= n ; i ++) { if(vis[i] == 0 ) { a[step] = i ; vis[i] = 1 ; dfs(step + 1); //遞迴 vis[i] = 0 ; //回溯 } } } int main() { memset(vis,0,sizeof(vis)); //初始化標記陣列為 0 while(~scanf("%d",&n)) { dfs(1); printf("\n"); //從一開始往裡搜尋 } return 0; }