823.排列
1、java版
因为输出规模为9! 输出数据规模大 所以要用BufferedWriter输出
import java.util.*;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Main
{
private static int n;
private static boolean[] st;
private static int[] path;
private static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
private static void dfs(int u) throws Exception
{
if(u==n)
{
for(int i=0;i<n;i++) bw.write(path[i]+" ");
bw.write("\n");
return;
}
for(int i=1;i<=n;i++)
if(!st[i])
{
path[u]=i;
st[i]=true;
dfs(u+1);
st[i]=false;
}
}
public static void main(String[] args) throws Exception
{
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
path=new int[n];
st=new boolean[n+1];
dfs(0);
bw.flush();
}
}
2、c++版
#include <bits/stdc++.h>
using namespace std;
const int N=10;
bool st[N];
int path[N];
int n;
void dfs(int u)
{
if(u==n)
{
for(int i=0;i<n;i++) cout<<path[i]<<" ";
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
if(!st[i])
{
st[i]=true;
path[u]=i;
dfs(u+1);
st[i]=false;
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}
92.递归实现指数型枚举
import java.util.*;
public class Main
{
static int n;
static boolean[] st=new boolean[20];
public static void dfs(int u)
{
if(u>n)
{
for(int i=1;i<=n;i++) if(st[i]) System.out.print(i+" ");
System.out.println();
return;
}
st[u]=true;
dfs(u+1);
st[u]=false;
dfs(u+1);
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
dfs(1);
}
}