华师一附中OI组
标题:
P1706 全排列问题
[打印本页]
作者:
admin
时间:
2018-5-10 12:06
标题:
P1706 全排列问题
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入输出格式
输入格式:
n(1≤n≤9)
输出格式:
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。
输入输出样例
输入样例#1:
3
输出样例#1:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
作者:
wzd(temp)
时间:
2018-5-11 21:38
#include <cstdio>
#include <cstdlib>
using namespace std;
bool X[10];
int q[10];
int N;
void dfs(int i)
{
if(i==N)
{
for(int ii=0;ii<N;ii++)
printf("%5d",q[ii]);
printf("\n");
return ;
}
for(int j=1;j<=N;j++)
{
if(!X[j])
{
q[i]=j;
X[j]=true;
dfs(i+1);
X[j]=false;
}
}
return ;
}
int main()
{
scanf("%d",&N);
dfs(0);
return 0;
}
复制代码
作者:
lyc
时间:
2018-5-11 22:56
#include<iostream>
#include<iomanip>
using namespace std;
int A[10],n;
void dfs(int n,int *A,int js){
if(js == n){
for(int i=0; i<n; i++)
cout<<setw(5)<<A[i];
cout<<endl;
return;
}
else for(int i=1; i<=n; i++){
bool ok = 1;
for(int j=0; j<js; j++)
if(A[j] == i) ok = 0;
if(ok){
A[js] = i;
dfs(n, A, js+1);
}
}
}
int main(){
cin>>n;
dfs(n, A, 0);
return 0;
}
复制代码
作者:
diggersun
时间:
2018-5-11 23:22
lyc
作者:
吴语林
时间:
2018-5-12 11:56
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
using namespace std;
int a[20],book[20],n;
void dfs(int cnt)
{
if(cnt==n+1)
{
for(int i=1;i<=n;i++)
printf("%5d",a[i]);
printf("\n");
return;
}
for(int i=1;i<=n;i++)
if(!book[i])
{
book[i]=1,a[cnt]=i;
dfs(cnt+1);
book[i]=0;
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
复制代码
作者:
张笑宇
时间:
2018-5-13 17:26
#include<iostream>
#include<iomanip>
using namespace std;
int n,a[10],b[10];
void dfs(int x)
{
if (x>=n+1)
{
for (int i=1; i<=n; i++)
cout<<setw(5)<<a[i];
cout<<endl;
return;
}
else
{
for (int i=1; i<=n; i++)
{
if (b[i]==false)
{
b[i]=true;
a[x]=i;
dfs(x+1);
b[i]=false;
}
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}
复制代码
作者:
admin
时间:
2018-5-13 17:59
很好 基本的pmn 标准的算法
作者:
黄煦喆
时间:
2018-5-13 20:17
#include<iostream>
#include<iomanip>
using namespace std;
int n,b[10],c[10],a[10]= {0,1,2,3,4,5,6,7,8,9};
void ms(int i)
{
if(i>n)
{
for(int j=1; j<i; j++)cout<<setw(5)<<c[j];
cout<<endl;
}
for(int k=1; k<=n; k++)
if(!b[k])
{
c[i]=a[k];
b[k]=1;
ms(i+1);
b[k]=0;
}
}
int main()
{
cin>>n;
ms(1);
return 0;
}
复制代码
diggersun: 你这个A[10] 是干什么用的?
作者:
walk_alone
时间:
2018-5-13 21:22
#include <cstdio>
int a[10],n,book[10];
void dfs(int step)
{
if(step==n+1)
{
for(int i=1;i<=n;i++)
printf("%5d",a[i]);
printf("\n");
}
else
for(int i=1;i<=n;i++)
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
a[step]=0;
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
复制代码
范彦廷提交
作者:
liubo
时间:
2018-5-16 16:48
#include<cstdio>
const int maxn = 15;
int n,c[maxn];
void print(int cur){
if(cur == n){
for(int i = 0; i < n;i++)
printf("%5d",c[i]);
printf("\n");
}
else{
for(int i = 1;i <= n;i++){
int ok = 1;
for(int j = 0;j < cur;j++){
if(i == c[j]){ok = 0;break;}
}
if(ok){c[cur] = i;print(cur+1);}
}
}
}
int main(){
scanf("%d",&n);
print(0);
return 0;
}
复制代码
注意精简自己的程序
作者:
YTC
时间:
2018-5-21 12:52
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
int a[10],n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) a[i]=i;
do
{
for(int i=1;i<=n;i++) cout<<setw(5)<<a[i]; cout<<endl;
}while(next_permutation(a+1,a+1+n));
return 0;
}
作者:
Scorpio
时间:
2018-6-9 15:05
#include<iostream>
#include<iomanip>
using namespace std;
int a[105],b[105];
int n;
void hhh(int i)
{
int j,k;
if(i>=n+1)
{
for(j=1;j<=n;j++)
cout<<setw(5)<<a[j];
cout<<endl;
return;
}
else for(k=1;k<=n;k++)
{
if(b[k]==0)
{
a[i]=k;
b[k]=1;
hhh(i+1);
b[k]=0;
}
}
}
int main()
{
cin>>n;
hhh(1);
return 0;
}
复制代码
作者:
lwy
时间:
2018-6-12 16:47
#include<iostream>
#include<iomanip>
using namespace std;
int a[11];
bool vis[11];
int n;
void dfs(int plc)
{
if(plc>n)
{
for(int i=1;i<=n;i++)
cout<<setw(5)<<a[i];
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
a[plc]=i;
dfs(plc+1);
vis[i]=0;
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}
作者:
Duoluo
时间:
2018-6-16 16:06
#include <iostream>
using namespace std;
int n;
bool x[10];
int a[10];
void dfs(int i)
{
if(i==n)
{
for(int q=0;q<n;q++) cout<<a[q]<<" "; cout<<endl;
}
else
{
for(int j=1;j<=n;j++)
{
if(x[j])
{
a[i]=j;
x[j]=false;
dfs(i+1);
x[j]=true;
}
}
}
}
int main()
{
cin>>n;
for(int ans=1;ans<=n;ans++)
x[ans]=1;
dfs(0);
return 0;
}
复制代码
作者:
倚窗倾听风吹雨
时间:
2018-7-12 13:52
#include<iostream>
#include<iomanip>
using namespace std;
int n,a[10];
bool b[10];
void dfs(int x)
{
int i;
if(x==n+1)
{
for(i=1; i<=n; i++)
cout<<setw(5)<<a[i];
cout<<endl;
return;
}
else
for(i=1; i<=n; i++)
{
if(!b[i])
{
b[i]=true;
a[x]=i;
dfs(x+1);
b[i]=false;
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}
复制代码
作者:
universehyf
时间:
2018-9-1 22:17
特别无聊地上STL algorithm 中的神奇函数
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,p[10],i;
cin>>n;
for(i=0;i<n;i++) p[i]=i;
do{
for(i=0;i<n;i++) cout<<p[i]<<" ";
cout<<endl;
}while(next_permutation(p,p+n)); //求下一个排列
return 0;
}
复制代码
作者:
ZMQ
时间:
2018-9-4 17:02
提示:
作者被禁止或删除 内容自动屏蔽
作者:
朱品屹
时间:
2020-8-5 10:08
#include<iostream>
using namespace std;
int a[11]={0,1,2,3,4,5,6,7,8,9},n;
bool b[11]={0,1,1,1,1,1,1,1,1,1};
void pr()
{
for(int i=1;i<=n;i++) cout<<" "<<a[i];
cout<<endl;
}
void pmn(int i)
{
if(i>n) pr();
else
{
for(int k=1;k<=n;k++)
{
if(b[k]==1)
{
a[i]=k;
b[k]=0;
pmn(i+1);
b[k]=1;
}
}
}
}
int main()
{
cin>>n;
pmn(1);
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2