题目来源:
http://bailian.openjudge.cn/practice/4070/
描述
对于数组[1, 2, 3],他们按照从小到大的全排列是
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
现在给你一个正整数n,n小于8,输出数组[1, 2, …,n]的从小到大的全排列。
输入
输入有多行,每行一个整数。当输入0时结束输入。
输出
对于每组输入,输出该组的全排列。每一行是一种可能的排列,共n个整数,每个整数用一个空格隔开,每行末尾没有空格。
样例输入
2
3
0
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
题意描述:
输入一个正整数n(小于8)
输出1到n的所有全排列方案
解题思路:
意即求n个位置放n个数的所有方案
程序代码:
1 #include<stdio.h> 2 int r[10],u[10]; 3 void dfs(int n,int x); 4 int main() 5 { 6 int n,i; 7 while(scanf("%d",&n),n!=0) 8 { 9 dfs(n,1); 10 } 11 return 0; 12 } 13 void dfs(int n,int x) 14 { 15 int i; 16 if(n+1==x) 17 { 18 for(i=1;i<n;i++) 19 printf("%d ",r[i]); 20 printf("%d\n",r[n]); 21 return; 22 } 23 for(i=1;i<=n;i++) 24 { 25 if(!u[i]) 26 { 27 r[x]=i; 28 u[i]=1; 29 dfs(n,x+1); 30 31 u[i]=0; 32 } 33 } 34 }
时间: 2024-10-21 11:05:07