为什么回溯无法生成所有可能的组合?
Why is backtracking unable to generate all possible combinations?
我有一个 {{"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
我无法生成所提到的所有组合,而且我无法弄清楚我的逻辑是 missing/error 哪种情况。
如果你替换它就有效
fun(i+1,j,metric);
和
fun(i+1,0,metric);
我有一个 {{"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
我无法生成所提到的所有组合,而且我无法弄清楚我的逻辑是 missing/error 哪种情况。
如果你替换它就有效
fun(i+1,j,metric);
和
fun(i+1,0,metric);