项目中的一个算法问题 本帖最后由 alian_1126 于 2010-07-08 18:53:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用树,这个问题可以归纳为树的深度优先遍历,实际上就是求一条最长的路径。思路如下: 把#号分割符去掉,一个序列就是一个数组从string[] 序列 = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };第一个元素开始构造树1-2-3-4 |_5_6也就是说从第一个元素作为根节点,后续的元素往第一个元素上增加。最后即可获得一课树。对这棵树进行遍历就可以获得所有分支了。 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 */ code=C#]Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");[[/code]这句是什么意思呢,不是很懂 Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");哪位前辈解释下 额,这是一个规则引擎。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= 比如呢?比如这个xxx节点,想要xxx数据??? 假设没有回环,他就是一颗树。那么直接构造treeview就可以解决 这么简单的东西要算法?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 };这个数组对本题没有意义呀。 这样说不知道会不会好点: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条记录,没排序,从序列字段可以看出这些组号是成一棵树,我想知道在程序里读出这些记录后,如何确定哪些数据库记录是在叶子节点上的。 好一点的办法,设一个长度为节点数的bool数组,初始值为true然后遍历节点,如果线内序列两个节点以上,则把倒数第二个节点对应的数组值改为false最后数组里为true的节点就是叶子节点 C# 读取文档数据 赋值给一数组 关于MAPINFO生成地图用两点画线 c#处理存储过程 由于出现被放弃的 mutex,等待过程结束 大家帮个忙!我想在GridView使用CheckBox使其能有选择性的删除怎么做! picturebox的问题, 寻求高手指点 如何在C#中运行一个应用程序? 有做过RTF的吗,有个插入图片的问题,请大虾帮忙 水晶报表如何不予览直接打印阿? 用CreateFile打开端口后,怎么关闭端口? 请问怎么通过API选定外部程序的TlistBox socket 传输中 汉字有乱码
思路如下:
把#号分割符去掉,一个序列就是一个数组
从string[] 序列 = { "1", "1#2", "1#2#3", "1#2#3#4", "1#2#5", "1#2#5#6" };
第一个元素开始构造树1-2-3-4
|_5_6也就是说从第一个元素作为根节点,后续的元素往第一个元素上增加。最后即可获得一课树。
对这棵树进行遍历就可以获得所有分支了。
{
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
*/
这句是什么意思呢,不是很懂
Enumerable.Repeat(i == 0 ? "" : " ", i + 1).Aggregate((s1, s2) => string.Format("{0}{1}", s1, s2)) + (i == 0 ? "" : "┗");哪位前辈解释下
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=
比如呢?比如这个xxx节点,想要xxx数据???
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 };这个数组对本题没有意义呀。
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条记录,没排序,从序列字段可以看出这些组号是成一棵树,我想知道在程序里读出这些记录后,如何确定哪些数据库记录是在叶子节点上的。