首页 新闻 会员 周边

二维数据 排列组合问题

0
悬赏园豆:50 [待解决问题]

有一个二维的数据,例如下:

List<List<string>> aaa = new List<List<string>>();
aaa.Add(new List<string>(){"1","2","3"});
aaa.Add(new List<string>(){"4","5","6"});
aaa.Add(new List<string>(){"7","8","9"});

数据的行数不固定,每行的列数都不一定相同

现在要从这个数据中,任选N行,每行任取一个数,做一个全排,中间;隔开

 

假设数据是这样的,N=2
结果是:
1;4 1;5 1;6 1;7 1;8 1;9 2;4 2;5 2;6 2;7 2;8 2;9 3;4 3;5 3;6 3;7 3;8 3;9 4;7 4;8 4;9 5;7 5;8 5;9 6;7 6;8 6;9 的一个集合

如果N=3,就是 1;4;7 1;4;8 1;4;8 1;5;7 1;5;8 1;5;9 1;6;7 1;6;8 1;6;9 ……等等 一个集合,这个算法 用深搜 要怎么写呢,C#语言

风飘零的主页 风飘零 | 初学一级 | 园豆:57
提问于:2015-12-02 17:40
< >
分享
所有回答(3)
0

这是ACM吧,自己写写,有益于身心健康。

[0] | 园豆:1257 (小虾三级) | 2015-12-02 17:58
0
package cnblogs;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test02 {
    
    public static void doPrint(List<List<String>> list, int[] marks){
        int tmp, j = 0, len = marks.length;
        List<String> t = null;        
        for(int i = 0; i < len; i++){
            j = 0;
            tmp = marks[i];
            t = list.get(j);
            while(tmp >= t.size()){
                j++;
                tmp -= t.size();
                t = list.get(j);
            }
            if(i > 0) System.out.print(',');
            System.out.print(t.get(tmp));
        }
        System.out.print(' ');
    }
    
    public static void doSelect(int groupSize, List<List<String>> list){
        int count = 0;
        for(List<String> strList : list){
            count += strList.size();
        }
        
        int[] marks = new int[groupSize];
        for(int i = 0; i < groupSize; i++) marks[i] = i;
        
        int offset = count - groupSize;
        while(true){
            doPrint(list, marks);
            if(marks[0] == offset) return;
            for(int i = groupSize - 1; i >= 0; i--){
                if(marks[i] < (offset + i)){
                    marks[i]++;
                    for(int j = i + 1; j < groupSize; j++){
                        marks[j] = marks[j - 1] + 1;
                    }
                    break;
                }
            }
        }
    }
    
    public static void main(String[] args) {
        List<List<String>> list = new ArrayList<List<String>>();
        list.add(Arrays.asList("1", "2", "3"));
        list.add(Arrays.asList("4", "5", "6"));
        list.add(Arrays.asList("7", "8", "9"));
        doSelect(2, list);
    }

}

//1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 2,3 2,4 2,5 2,6 2,7 2,8 2,9 3,4 3,5 3,6 3,7 3,8 3,9 4,5 4,6 4,7 4,8 4,9 5,6 5,7 5,8 5,9 6,7 6,8 6,9 7,8 7,9 8,9 

加班ing,回家才有VS,不知道写得对不对,题主测试测试吧

之奇一昂 | 园豆:1421 (小虾三级) | 2015-12-02 18:42

公司只有JAVA,抱歉,不过应该差不多

支持(0) 反对(0) 之奇一昂 | 园豆:1421 (小虾三级) | 2015-12-02 18:42
0

矩阵

需要格局 | 园豆:2145 (老鸟四级) | 2015-12-03 14:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册