1. 程式人生 > >5972: 【遞歸入門】全排列

5972: 【遞歸入門】全排列

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: 【遞歸入門】全排列