-->
当前位置:首页 > 题库 > 正文内容

7-4 交换实现的全排列 (10 分)

Luz4年前 (2021-03-05)题库2347
7-4 交换实现的全排列 (10 分)

用交换的分治法实现前m(m<10)个自然数数的全排列。 提示:通过交换实现的全排列不是字典序的全排列。

输入格式:

输入一个数m,代表要用1-m个自然数的全排列。

输出格式:

输出前m个自然数的全排列。(每个数之间用一个空格隔开,每行结束后有一个空格。最后一行数后面有一个空行,即每输出一行后添加一个换行,不考虑是否是最后一行)

输入样例:

3

输出样例:

1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 2 1 
3 1 2

作者
严华云
单位
湖州师范学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


Answer:

#include<iostream>
using namespace std;
int m;
int a[100];
void swap(int &a,int &b){
	int t;
	t=a;
	a=b;
	b=t;
}
void perm(int n,int m){
	if(n==m){
		for(int i=1;i<=m;i++){
			cout<<a[i]<<' '; 
		}
		cout<<endl; 
	}else{
		for(int i=n;i<=m;i++){
			swap(a[i],a[n]);
			perm(n+1,m);
			swap(a[i],a[n]);
		}
	}
	
}
int main(){
	cin>>m;
	for(int i=1;i<=m;i++){
		a[i]=i;
	}
	perm(1,m);
}


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。