java - 为什么回溯无法生成所有可能的组合?

标签 java algorithm recursion multidimensional-array backtracking

我有一个二维数组,形式为 {{"x"},{"a","b","c"},{"1","2","3"}}

我想生成以下所有组合:

xa1
xa2
xa3
xb1
xb2
xb3
xc1
xc2
xc3

我编写了以下递归代码来生成组合:

String dim[][] ={{"x"},{"a","b","c"},{"1","2","3"}};
void fun(int i,int j,String []metric)
{


    if(i>=dim.length)
    {
        for(int k=0;k<i;k++)
            System.out.print(metric[k]);    
        System.out.println();
        return;
    }

    if(j>=dim[i].length)
            return;
        metric[i] = dim[i][j];
    fun(i+1,j,metric);

    fun(i,j+1,metric);



}
public static void main (String[] args) throws java.lang.Exception
{
    // your code goes here
    String metric[] = new String[20];
    Ideone b = new Ideone();
    b.fun(0,0,metric);
}

我得到以下不完整的输出:

xa1
xa2
xa3
xb2
xb3
xc3

我无法生成所提到的所有组合,我无法弄清楚我的逻辑中缺少/错误的情况。

最佳答案

如果你替换它就有效

fun(i+1,j,metric);

fun(i+1,0,metric);

关于java - 为什么回溯无法生成所有可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30070895/

相关文章:

java - 缺少通过 Java-Wrapper 将表达式添加到 Z3 的批量模式

java - 如何让物体在另一个物体接触后消失?

php - 实现python切片表示法

sql - MongoDB中地理空间索引的内部机制

algorithm - 如何限制 IO 操作的速率?

recursion - 返回最小生成树中两个节点之间的路径

java - 使用ajax在不同面板中的 Wicket 口刷新listView

java - 带有@ManyToOne 的两个实体应该加入同一个表

javascript - SetTimeout 递归 (Javascript)

recursion - F# : Writing a function that builds a list of tuples recursively and change a mutable variable