使用Java+DFS解决随机排列组合(每个位置3种情况)的问题

假设给定3个数:1,2,3,求出其随机排列组合(每个位置3种情况)的所有情况。

111 112 113
121 122 123
131 132 133
211 212 213
221 222 223
231 232 233
311 312 313
321 322 323
331 332 333

 

数组保存每种情况:

int[] num = new int[3];

函数原型:

public static void dfsExample(int index)

 

边界测试代码:

if (index == 3)
        {
            count++;
            for (int i = 0; i < 3; i++)
            {
                System.out.print(num[i]+" ");
            }
            //走不下去了就 return了
            return;
        }

DFS过程:

for (int i = 1; i <= 3; i++)
        {
            num[index] = i;
            // index+1 枚举下一种情况
            dfsExample(index+1);
            System.out.println("index="+index);
        }

完整代码:

public class DFS排列组合 {
    static int[] num = new int[3];
    static int count=0;
    public static void dfsExample(int index)
    {
        // 边界条件
        if (index == 3)
        {
            count++;
            for (int i = 0; i < 3; i++)
            {
                System.out.print(num[i]+" ");
            }
            //走不下去了就 return了
            return;
        }
        for (int i = 1; i <= 3; i++)
        {
            num[index] = i;
            // index+1 枚举下一种情况
            dfsExample(index+1);
        }
    }
    public static void main(String[] args) {
        dfsExample(0);
    }
}

输出:

Output:
1 1 1 
1 1 2 
1 1 3 
1 2 1 
1 2 2 
1 2 3 
1 3 1 
1 3 2 
1 3 3 
2 1 1 
2 1 2 
2 1 3 
2 2 1 
2 2 2 
2 2 3 
2 3 1 
2 3 2 
2 3 3 
3 1 1 
3 1 2 
3 1 3 
3 2 1 
3 2 2 
3 2 3 
3 3 1 
3 3 2 
3 3 3 

修改函数代码理解原理:

public class DFS排列组合 {
    static int[] num = new int[3];
    static int count=0;
    public static void dfsExample(int index)
    {
        // 边界条件
        if (index == 3)
        {
            count++;
            for (int i = 0; i < 3; i++)
            {
                System.out.print(num[i]+" ");
            }
            //System.out.println();
            //走不下去了就 return了
            return;
        }
        for (int i = 1; i <= 3; i++)
        {
            num[index] = i;
            // index+1 枚举下一种情况
            dfsExample(index+1);
            System.out.println("index="+index);
        }
    }
    public static void main(String[] args) {
        dfsExample(0);
    }
}

输出:

Principle_Output:
1 1 1 index=2
1 1 2 index=2
1 1 3 index=2
index=1
1 2 1 index=2
1 2 2 index=2
1 2 3 index=2
index=1
1 3 1 index=2
1 3 2 index=2
1 3 3 index=2
index=1
index=0
2 1 1 index=2
2 1 2 index=2
2 1 3 index=2
index=1
2 2 1 index=2
2 2 2 index=2
2 2 3 index=2
index=1
2 3 1 index=2
2 3 2 index=2
2 3 3 index=2
index=1
index=0
3 1 1 index=2
3 1 2 index=2
3 1 3 index=2
index=1
3 2 1 index=2
3 2 2 index=2
3 2 3 index=2
index=1
3 3 1 index=2
3 3 2 index=2
3 3 3 index=2
index=1
index=0

画图解释:

你可能感兴趣的:(算法与数据结构,dfs,递归,回溯)