5972: 【遞歸入門】全排列
阿新 • • 發佈:2017-08-26
ans nbsp 學習 lag amp spa include print 入門經典
題目描述
排列與組合是常用的數學方法。
先給一個正整數 ( 1 < = n < = 10 )
例如n=3,所有組合,並且按字典序輸出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
輸入
輸入一個整數n( 1<=n<=10)
輸出
輸出所有全排列
每個全排列一行,相鄰兩個數用空格隔開(最後一個數後面沒有空格)
樣例輸入
3
樣例輸出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
這是對昨天學習《算法競賽入門經典》的復習,應用了7.2.1生成1~n的排列 遞歸方法。
#include<stdio.h> int a[1000],n; void Get_a(int n,int *a,int ans) { int flag,i,j; if( ans == n+1) { for(i = 1; i < n; i ++) printf("%d ",a[i]); printf("%d\n",a[n]); } else { for(i = 1; i <= n; i ++) { flag= 1; for(j = 1; j < ans; j ++) if(a[j] == i) flag = 0; if(flag) { a[ans] = i; Get_a(n,a,ans+1); } } } return; } int main() { while(scanf("%d",&n)!=EOF) { Get_a(n,a,1); } return 0; }
5972: 【遞歸入門】全排列