求2维数组有多少种排列的算法

有一2维数组,比如:String[][] a={{1,2},{3},{4},{5,6}};
求这些数字一共可以组合多少种排列,并打印所有可能情况

比如上面的数字可以有这些情况:1345,1346,2345,2346

最好不要递归,速度要快!

下面是采用广度优先遍历的代码,我已经测试过了
[code="java"]
/*有一2维数组,比如:String[][] a={{1,2},{3},{4},{5,6}};
求这些数字一共可以组合多少种排列,并打印所有可能情况
比如上面的数字可以有这些情况:1345,1346,2345,2346
最好不要递归,速度要快! */

import java.util.LinkedList;
//采用广度优先遍历
public class BroadFirst {

//用于存储遍历情况的列表
private LinkedList<String> list=new LinkedList<String>();
//传入的参数
private String[][] para=null;

public BroadFirst(String[][] para){
    this.para=para;
    //将第一个列表添加到遍历列表的前端
    for(String str:this.para[0]){
        this.list.addLast(str);
    }
    //产生序列
    this.createSequence();
}

private void createSequence() {
    int innerLength = 1;
    while (true) {
        String temp = this.list.pollFirst();
        innerLength = temp.length();
        // 深度够了则执行完成
        if (innerLength == para.length) {
            this.list.addFirst(temp);
            return;
        } else {
            for (String innerStr : this.para[innerLength]) {
                // 依次入队列的末端
                this.list.addLast(temp + innerStr);

            }
        }
    }
}

public void printString(){

    for(String str:this.list){
        System.out.println(str);
    }
}
//测试
public static void main(String[] args) {
    String[][] temp={{"1","2"},{"3"},{"4"},{"5","6"},{"7","8"}};
    BroadFirst bf=new BroadFirst(temp);
    bf.printString();
}

}
[/code]

深度优先的,你可以自己模仿着写出来了