本帖最后由 syf1682006 于 2011-06-06 13:23:39 编辑

解决方案 »

  1.   

    本帖最后由 caozhy 于 2011-06-06 13:48:24 编辑
      

  2.   

    a c e h j
    a d e h j
    a c f h j
    a d f h j
    a c g h j
    a d g h j
    a c e i j
    a d e i j
    a c f i j
    a d f i j
    a c g i j
    a d g i j
    Press any key to continue . . .
      

  3.   

    再给你个容易阅读点的版本
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        static class Enumerable
        {
            public static IEnumerable<IEnumerable<TSource>> Combo<TSource>(this IEnumerable<IEnumerable<TSource>> source, IEnumerable<TSource> second)
            {
                foreach (var i in second)
                {
                    foreach (var j in source)
                    {
                        List<TSource> list = new List<TSource>();
                        list.Add(i);
                        yield return j.Concat(list);
                    }
                }
            }        public static IEnumerable<IEnumerable<TSource>> StartCombo<TSource>(this IEnumerable<TSource> first)
            {
                foreach (var i in first)
                {
                    List<TSource> list = new List<TSource>();
                    list.Add(i);
                    yield return list;
                }
            }
        }    class Program
        {
            static void Main(string[] args)
            {
                List<List<string>> list = new List<List<string>>()
                {
                    new List<string>() { "a" },
                    new List<string>() { "c", "d" },
                    new List<string>() { "e", "f", "g" },
                    new List<string>() { "h", "i" },
                    new List<string>() { "j" }
                };
                var result = list.Skip(1).Aggregate(list.First().StartCombo(), (serials, current) => serials.Combo(current), x => x).ToList();
                result.ForEach(x => { x.ToList().ForEach(y => Console.Write(y + " ")); Console.WriteLine(); });
            }
        }
    }
      

  4.   

    本帖最后由 caozhy 于 2011-06-07 09:01:52 编辑
      

  5.   

    lz,我给你帖子加了40分,记得这40分给10L.
      

  6.   

    既然标题是“求解一高效算法”怎么还有这么多用Linq实现的?
      

  7.   

    你在2楼不是说了吗...他是穷举结果,既然无法再高效为什么不能用Linq...
      

  8.   

    10楼大亮。
    刚想说“这不是数据库join一下就好了嘛”,就发现给出了linq的方法,受教。
      

  9.   

    楼主可以一试..            List<List<string>> list = new List<List<string>>()
                {
                    new List<string>() { "a" },
                    new List<string>() { "c", "d" },
                    new List<string>() { "e", "f", "g" },
                    new List<string>() { "h", "i" },
                    new List<string>() { "j" }
                };
                var query= list.Aggregate(new string[] {""},(r,s)=>(from a in r from b in s select a+" "+b).ToArray());
                query.ToList().ForEach(p => Console.WriteLine(p));
                Console.ReadKey();
      

  10.   

    结果
         /*
            a c e h j
            a c e i j
            a c f h j
            a c f i j
            a c g h j
            a c g i j
            a d e h j
            a d e i j
            a d f h j
            a d f i j
            a d g h j
            a d g i j 
            */
      

  11.   

            static public void Slove()
            {
                List<List<string>> listArr = new List<List<string>>(){
                    new List<string>() { "a" },
                    new List<string>() { "c", "d" },
                    new List<string>() { "e", "f", "g" },
                    new List<string>() { "h", "i" },
                    new List<string>() { "j" }
                };
                int Count = 1;
                listArr.ForEach(l =>
                {
                    Count *= l.Count;
                });
                for (int i = 0; i < Count; ++i)
                {
                    int t = 1;
                    listArr.ForEach(l => {
                        t *= l.Count;
                        Console.Write(l[ (i/( Count/t )) % l.Count ]);
                    });
                    Console.WriteLine();
                }
                
            }
      

  12.   

    版主给版主分,,,太强大了。刚看了一个帖子,很相似http://bbs.csdn.net/topics/390368277。版主caozhy 给了一个方法。