用回溯法来输出全排列
1.C++
// 2_全排列回溯+DFS.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int arr[5];
int status[5];
int num;
void DFS(int arr[], int status[],int step)
{
if (step == num+1)
{
for (int i = 1; i <= num; i++)
{
cout << arr[i] << "|";
}
cout << endl;
return;
}
for (int i = 1; i <= num; i++)
{
if (status[i] == 0)
{
status[i] = 1;
arr[step] = i;
DFS(arr, status, step + 1);
status[i] = 0;
}
}
}
int main()
{
while (1)
{
cout << "个数:" << endl;
cin >> num;
for (int i = 1; i <= num; i++)
{
//arr[i] = i;
status[i] = 0;
}
DFS(arr, status, 1);
}
return 0;
}
2.java
import java.util.Scanner;
public class Main {
public static void DFS(int[] arr,int[] status,int step,int num){
if(step==num+1)
{
for(int c:arr)
System.out.print(c+"|");
System.out.println();
return;
}
for(int i=1;i<=num;i++)
{
if(status[i]==0)
{
status[i]=1;
arr[step]=i;
DFS(arr,status,step+1,num);
status[i]=0;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(true)
{
System.out.println("请输入个数:");
int num=sc.nextInt();
int[] arr=new int[num+1];
int[] status=new int[num+1];
for(int c:status)
{
status[c]=0;
}
DFS(arr,status,1,num);
}
}
}