本帖最后由 alian_1126 于 2010-07-08 18:53:46 编辑

解决方案 »

  1.   

    用树,这个问题可以归纳为树的深度优先遍历,实际上就是求一条最长的路径。
    思路如下:
     把#号分割符去掉,一个序列就是一个数组
    从string[] 序列 = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };
    第一个元素开始构造树1-2-3-4
      |_5_6也就是说从第一个元素作为根节点,后续的元素往第一个元素上增加。最后即可获得一课树。
    对这棵树进行遍历就可以获得所有分支了。
      

  2.   

           public static string getTabStr(int i)
            {
                return Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");
            }
            static void Main(string[] args)
            {
                string[] List = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };            Dictionary<string, int> _l = new Dictionary<string, int>();
                foreach (string s in List)
                {
                    if (s.IndexOf("#") > -1)
                        _l.Add(s.Split('#').Last(), s.Length - s.Replace("#", "").Length);
                    else
                        _l.Add(s, Convert.ToInt32(s));
                }            foreach (var D in _l)
                {
                    Console.WriteLine(getTabStr(D.Value) + D.Key);
                }
                /*
                  ┗1
                  ┗2
                   ┗3
                    ┗4
                   ┗5
                    ┗6
                */
      

  3.   

    code=C#]Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");[[/code]
    这句是什么意思呢,不是很懂
      

  4.   


    Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");哪位前辈解释下
      

  5.   

    额,这是一个规则引擎。c#里面的规则引擎方面的例子不多,但也可以找得到几款。lz可以google之ps:大部分规则引擎都是采用Rete算法的,Rete算法的中文资料不太多,偶尔可以在博客园看到几篇零星的片段
    http://www.google.com/search?hl=en&source=hp&q=%E5%8D%9A%E5%AE%A2%E5%9B%AD+Rete%E7%AE%97%E6%B3%95&aq=f&aqi=&aql=&oq=&gs_rfai=
      

  6.   


    比如呢?比如这个xxx节点,想要xxx数据???
      

  7.   

    假设没有回环,他就是一颗树。那么直接构造treeview就可以解决
      

  8.   

    这么简单的东西要算法?
    string[] 序列 = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };
    ,用一个for循环得到字符串长度最大的那些数组就可以了,如果>2个,那就随便取两个不就可以了。
    另外int[] 组号= { 1, 2, 3, 4, 5, 6 };这个数组对本题没有意义呀。
      

  9.   

    这样说不知道会不会好点:
    int[] 组号= { 1, 2, 3, 4, 5, 6 };
    string[] 序列 = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };
    组号:线路图上的所有点;
    序列:所有组号在线路图上的路径,例如"1"是第1组的路径,“1#2”是第2组的路径,“1#2#3”是第3组的路径,“1#2#3#4”是第4组的路径,“1#2#5"是第5组的路径,"1#2#5#6"是第6组的路径;这些组号是数据库里6条记录,没排序,从序列字段可以看出这些组号是成一棵树,我想知道在程序里读出这些记录后,如何确定哪些数据库记录是在叶子节点上的。
      

  10.   

    好一点的办法,设一个长度为节点数的bool数组,初始值为true然后遍历节点,如果线内序列两个节点以上,则把倒数第二个节点对应的数组值改为false最后数组里为true的节点就是叶子节点