好坑的数据啊,标准dfs居然过不了。洛谷限时3秒,这里居然限时1秒,太坑了。决定找stl去通过数据。
80分代码如下:
#include<iostream>
using namespace std;
int n,a[100],used[100];
void dfs(int x){
if (x==n+1){
for (int i=1;i<=n;i++) cout<<" "<<a[i];
cout<<endl;
return ;
}
for (int i=1;i<=n;i++){
if (!used[i]){
used[i]=1;
a[x]=i;
dfs(x+1);
used[i]=0;
}
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
然后把cin和cout改成scanf和printf,就AC了。
最后,用STL,也过了。
#include<stdio.h>
#include <algorithm>
using namespace std;
int a[10], n;
int main()
{
scanf("%d",&n);
for (int i=0;i<n;i++) a[i]=i+1;
for (int i=0;i<n;i++) printf(" %d",a[i]);
printf("\n");
while (next_permutation(a,a+n))
{
for (int i=0;i<n;i++) printf(" %d",a[i]);
printf("\n");
}
return 0;
}