解法一
public class Arrange {
public static void main(String[] args)
{
int[] a = {1,2,3,4};
arrange(a,0,a.length);
}
//交换
public static void swap(int a[],int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//全排列
public static void arrange(int a[],int index,int length)
{
if(index>=length-1)
{
output(a);//如果到达数组最后一个元素,则输出数组
}
else
{
for(int i = index;i<length;i++)
{
swap(a,index,i);
arrange(a,index+1,length);//递归
swap(a,index,i);
}
}
}
//输出数组
public static void output(int a[])
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println("");
}
}
解法二
public class DfsArrange {
public static int[] visit = new int[3];
public static int[] array = new int[3];
public static void main(String[] args) {
dfs(0);
}
public static void dfs(int index)
{
if(index>=array.length)
{
outputArray(array);
}
else
{
for(int i = 0;i<array.length;i++)
{
if(visit[i]!=1)
{
visit[i] = 1;
array[index] = i;
dfs(index+1);
visit[i] = 0;
}
}
}
}
//输出数组
public static void outputArray(int[]array)
{
for(int a:array){
System.out.print(a+" ");
}
System.out.println("");
}
}