题目:有编号为 1,2,3 的 3 张扑克牌和编号为 1、2、3 的 3 个盒子。现在需要将这 3 张扑克牌分别放到 3 个盒子里面,并且每个盒子有且只能放一张扑克牌,共有多少种不同的放法?
代码演示:
public class dfsAlgorithms {
private static int n = 3; // 三张牌
private static int[] array = new int[4];
private static int[] book = new int[4]; // 标记数组
// step 表示现在站在第几个盒子面前
private static void dfs(int step){
// 表示前面 n 个盒子已经放好扑克牌
if(step == n+1) {
// 此时牌已经全部放进去了
for(int i=1;i<=n;i++) {
System.out.print(array[i]);
}
System.out.println();
return; // 返回到上一个 dfs 函数
}
for(int i=1;i<=n;i++) {
// 判断扑克牌是否还在手上
if(book[i]==0) {
array[step] = i; // 将 i 号扑克牌放到第 step 个盒子中
book[i] = 1; // 表示扑克牌已经不在手中了
// 第 step 个盒子已经放好牌,走到下一个盒子前
dfs(step+1); // 递归
book[i]=0; // 收回已经放置的 i 号牌,进行下一步摆放
}
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
dfs(1); // 站在第一个盒子前
}
}
结果展示:
每一次放置都可以说是一种扩展,因为每次站在盒子面前,其实都有 n 种放置放法,但不是每次放置都能成功
感谢观看,麻烦点个赞。。。