对ABC进行全排列
step是你当前要存放元素的位置,i是你要取出哪个地方的元素放到step的位置。
public class DfsTest
{
static int n;
static char[] box = new char[15];
static int[] vis = new int[15];
static void dfs(String str,int step) //访问step位置
{
if (step == n) {
for (int i = 0; i < n; i++) {
System.out.print(box[i]+" ");
}
System.out.println();
return;
}
for (int i = 0; i < n; i++)
{
if(vis[i]==0) //如果这个数之前没有被选择过
{
box[step] = str.charAt(i); //将step位置的值设置位str的i位置的值。
vis[i] = 1;
dfs(str,step+1); //进行下一位的选择
vis[i] = 0; //回溯,要知道回溯到什么样的状态,也就是这一位不选择i,选择其他的数
}
}
}
public static void main(String[] args)
{
String str = "ABC";
n = str.length();
dfs(str,0);
}
}
输出为
A B C
A C B
B A C
B C A
C A B
C B A
全排列解法1
使用dfs进行全排列
一定要先画图,再看看回溯的是什么?
public class DfsTest
{
static int n;
static int[] box = new int[15];
static int[] vis = new int[15];
static void dfs(int step) {
if (step == n) {
for (int i = 0; i < n; i++) {
System.out.print(box[i]+" ");
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++)
{
if(vis[i]==0) //如果这个数之前没有被选择过
{
box[step] = i;
vis[i] = 1;
dfs(step+1); //进行下一位的选择
vis[i] = 0; //回溯,要知道回溯到什么样的状态,也就是这一位不选择i,选择其他的数
}
}
}
public static void main(String[] args)
{
n=3;
dfs(0);
}
}