全排列问题
2017-07-22 13:54
148 查看
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
输入 n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字占5列。
样例输入
4
样例输出
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 1 4 3
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
#include<iostream>
#include<iomanip>
using namespace std;
int a[9];
int b[9]={0};
int n;
int search(int step)
{
if(step==0)
{
int i;
for(i=0;i<n;i++)
{
cout<<setw(5)<<a[i];
}
cout<<endl;
return 0;
}
else
{
int i;
for(i=1;i<=n;i++)
{
if(b[i-1]==1)
continue;
b[i-1]=1;
a[n-step]=i;
search(step-1);
b[i-1]=0;
}
}
return 0;
}
int main()
{
cin>>n;
search(n);
return 0;
}
输入
输入 n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字占5列。
样例输入
4
样例输出
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 1 4 3
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
#include<iostream>
#include<iomanip>
using namespace std;
int a[9];
int b[9]={0};
int n;
int search(int step)
{
if(step==0)
{
int i;
for(i=0;i<n;i++)
{
cout<<setw(5)<<a[i];
}
cout<<endl;
return 0;
}
else
{
int i;
for(i=1;i<=n;i++)
{
if(b[i-1]==1)
continue;
b[i-1]=1;
a[n-step]=i;
search(step-1);
b[i-1]=0;
}
}
return 0;
}
int main()
{
cin>>n;
search(n);
return 0;
}
相关文章推荐
- 排列问题-c语言代码实战
- 全排列问题
- 有重复元素的全排列问题
- 常见的排列组合问题
- VS2005进行WAP开发中的控件排列问题
- 程序员编程艺术第十六~第二十章:全排列,跳台阶,奇偶调序等问题
- 请初高中及大学老师回答,为什么?(鸽巢原理:排列组合问题)
- 多重排列问题
- 模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇
- 排列问题
- 排列组合问题
- 有重复元素的排列问题
- 循环赛问题 日程安排的一种排列方式 使用C++实现
- 排列问题
- 排列组合问题的通用算法
- 蓝桥杯-7对数字排列问题
- 字符串全排列问题 java语言实现
- 有重复元素的排列问题
- 结构定义中元素位置排列问题
- 全排列问题&&组合问题