`

生成树的排序方法

阅读更多
 
private List CreateTree(List all)
	{
		if(all==null||all.size()==0)
			return null;
		
		int count=all.size();
		 
		Base_sysfunc bi=new Base_sysfunc();
		Base_sysfunc bj=new Base_sysfunc();
		
		//组织好父子之间的关系 填充layer与parentname这两个字段的内容
		for(int i=0;i<count;i++)
		{
			bi=(Base_sysfunc)all.get(i);
			bi.setLayer(0);
			bi.setFullname(bi.getFuncname());
			boolean trans=false; 
			for(int j=i+1;j<count;j++)
			{
				bj=(Base_sysfunc)all.get(j);
				if(bi.getParentid()==bj.getFuncid())
				{
					//是父子关系 
					all.set(i,bj);
					all.set(j, bi); //父在前面子在后面					
					trans=true;
				} 
			}
			 
			if(trans)
				i--;
		}  
		
		
		for (int i=0;i<count;i++)
        {
			bi=(Base_sysfunc)all.get(i);
			boolean trans=false; 
			for(int j=i+1;j<count;j++)
			{
				bj=(Base_sysfunc)all.get(j);
				if(bj.getParentid()==bi.getFuncid())
				{
					bj.setLayer(bi.getLayer()+1); 
					bj.setFullname(bi.getFullname()+"&gt;&gt;"+bj.getFuncname());
				}
			}
        } 
		
		//组织在vector中的存放顺序
		
		for(int i=0;i<count;i++)
		{
			bi=(Base_sysfunc)all.get(i);
			boolean trans=false;
			for(int j=i+1;j<count;j++)
			{
				bj=(Base_sysfunc)all.get(j);
				if(bi.getFuncid()==bj.getParentid())
				{
					all.remove(j);
					all.add(i+1,bj);
				}
			}
		} 
		
		for(int i=0;i<count;i++)
		{
			bi=(Base_sysfunc)all.get(i);
			boolean trans=false;
			for(int j=i+1;j<count;j++)
			{
				bj=(Base_sysfunc)all.get(j);
				if(bi.getFuncid()==bj.getParentid())
				{
					all.remove(j);
					all.add(i+1,bj);
				}
			}
		} 
		
		return all;
		
	}
	 
	
	private List CreateTree(List all,int topid)
	{ 	
		all=CreateTree(all);
		int count=all.size();
		Base_sysfunc bj=new Base_sysfunc();
		
		//把不在这一顶层的其它项都删除掉
		
//		查找ID=topid所在的位置
		int topidj=0;
		int topidlayer=0;
		
		//查找ID=topid所在的位置
		for(int j=0;j<count;j++)
		{
			bj=(Base_sysfunc)all.get(j); 
			//找到TopID对应的对象
			if(bj.getFuncid()==topid)
			{
				topidj=j;
				topidlayer=bj.getLayer();
				break;
			}
		}
		Vector reslut=new Vector();
		for(int j=topidj;j<count;j++)
		{
			bj=(Base_sysfunc)all.get(j);
			
			//找到TopID对应的对象
			if(bj.getLayer()<=topidlayer&&j>topidj)
			{
				 break;
			}
			else
			{
				bj.setLayer(bj.getLayer()-topidlayer);
				reslut.add(bj);
			} 
		} 
		
		return reslut;
		
	}




//////////////////
public class Base_sysfunc  implements java.io.Serializable {


    // Fields    

     private long funcid;
     private long parentid;
     private long funcstatus;
     private String funcversion;
     private String funcname;
     private long showorder;
     private long menuflag;
     private String entranceurl;
     private String comments;
// set/getMethod..........

}


分享到:
评论

相关推荐

    C#实现最小生成树

    在计算机科学中,最小生成树(Minimum Spanning Tree, MST)是图论中的一个重要概念,尤其是在网络设计和优化问题中广泛应用。最小生成树允许我们找到一个无向加权图的所有节点间连接的边集合,使得这个集合构成的树...

    数据结构最小生成树算法

    普利姆算法(Prim's Algorithm)和克鲁斯卡尔算法(Kruskal's Algorithm)是两种常用的求解最小生成树的方法。 1. **普利姆算法**: - 普利姆算法从一个起始顶点开始,逐步添加边,每次添加的边都是当前生成树与图...

    最小生成树实验报告

    这个实验报告详细展示了如何用C语言实现PRIM算法,提供了清晰的代码结构和解释,有助于学习者理解最小生成树的概念和实现方法。通过实际编程,可以更好地掌握这种算法的逻辑,并提高问题解决能力。

    生成所有最小生成树

    生成所有最小生成树的方法通常基于贪心算法或回溯算法。其中,最为著名的是Kruskal's Algorithm和Prim's Algorithm。 1. **Kruskal's Algorithm**: - 按照边的权重升序排列所有边。 - 初始化一个空的边集合,...

    图 拓扑排序 深度搜索 广度搜索 最小生成树

    在这个主题中,我们将深入探讨“图”的核心概念,以及与之相关的拓扑排序、深度优先搜索(DFS)、广度优先搜索(BFS)和最小生成树(Minimum Spanning Tree, MST)。 首先,**图** 是由节点(也称为顶点)和边组成...

    最小生成树解决tsp问题

    最小生成树(Minimum Spanning Tree, MST)是图论中的一个重要概念,主要应用于寻找一个无向加权图中连接所有顶点的边的集合,使得这些边的...通过分析这些文件,可以更深入地理解和应用最小生成树解决TSP问题的方法。

    数据结构 最小生成树

    "最小生成树"是其中一个重要概念,特别是在图论和网络优化中广泛应用。本项目旨在通过C++编程语言实现这一经典算法,以加深对数据结构和算法的理解。 最小生成树(Minimum Spanning Tree, MST)是指在连通的加权无...

    次小生成树

    3. **Kruskal 算法**:一种常用的构造最小生成树的贪心算法,按照边的权重从小到大排序,依次加入不会形成环路的边,直至构成一棵生成树。 #### 八、代码实现 题目中给出了部分伪代码示例,这里不再赘述,但可以...

    java最小生成树

    采用堆排序实现带权值的边的顺序排列 利用克鲁斯卡尔算法实现最小生成树 首先 n城市之间全连接 输出所有连接和其边的权值 最后输出n个城市之间通信代价最小的最小生成树。 可用于java数据结构课程设计:“若要在n个...

    最小生成树的思路方法

    最小生成树的构造方法主要有两种经典算法:Prim算法和Kruskal算法。 1. **Prim算法**: Prim算法是从一个初始顶点开始逐渐扩展生成树的。首先选择一个起始顶点,然后在剩余的顶点中寻找与已选顶点相连且权重最小的...

    二叉排序树的生成与排序

    数据结构课,实验内容,二叉排序树的生成与排序

    数据结构 最小生成树C代码

    克鲁斯卡尔算法是解决最小生成树问题的一种常用方法。该算法的主要思想是,将图中的所有边按照权值从小到大排序,然后从小到大选取边,直到所有节点都被连接起来为止。在这里,我们使用C语言实现了克鲁斯卡尔算法,...

    用Prim和Kruskal算法构造最小生成树

    3. **选择边**:遍历排序后的边,对每条边检查是否会在生成树中形成环路,如果不形成环路,则将这条边添加到集合E中。 4. **终止条件**:当集合E包含n-1条边时(其中n为顶点数),算法结束。 虽然示例代码中没有给...

    数据结构作业最小生成树实验报告

    1、问题描述:若要在n个城市之间建设通信网络,只需要假设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题 ...输出为所得到的邻接矩阵以及按权排序后的边和最后得到的最小生成树;

    无向图的广度优先生成树

    在图论和计算机科学中,这种遍历方法常用于寻找最短路径、检测环路或构建最小生成树等任务。本文将详细介绍无向图的邻接表存储以及广度优先遍历的方法,并探讨树的几种遍历策略。 首先,我们需要理解无向图的概念。...

    最小生成树kruskal算法

    Kruskal算法提供了一种有效的方法来解决最小生成树问题。通过将图的边按照权重排序并逐步构建生成树,避免了形成环路的可能性,最终得到了一个总权重最小的生成树。尽管在处理稠密图时可能不如Prim算法高效,但...

    数据结构课件(最小生成树)

    总结来说,最小生成树是解决网络优化问题的关键工具,普里姆算法和克鲁斯卡尔算法则是构建最小生成树的常用方法,各有其适用场景和优缺点。在实际问题中,理解并灵活运用这些算法有助于找到最优解。

    3.0最小生成树之克鲁斯卡尔算法(添加生成树,添加画图).zip

    克鲁斯卡尔算法(Kruskal's Algorithm)是求解最小生成树的一种经典方法,由约瑟夫·克鲁斯卡尔在1956年提出。本项目以Java编程语言实现了这一算法,并结合图形界面,使得理解和应用更加直观。 首先,我们要理解...

    Prim与Kruskal算法的最小生成树matlab实现

    Prim算法和Kruskal算法是两种常用的求解最小生成树的方法,它们各有特点和适用场景。 1. **Prim算法**: Prim算法是从一个顶点开始,逐步添加边来构建最小生成树。它每次选择与当前树连接且权重最小的边,直到所有...

    头歌数据结构图的最小生成树算法

    该算法先将图的所有边按权重从小到大排序,然后依次添加每条边到生成树中,只要这条边不会形成环路即可。 #### 3.2 实现 同样地,文件给出了两种实现方式,一种基于邻接矩阵,另一种基于邻接表。 ##### 3.2.1 邻接...

Global site tag (gtag.js) - Google Analytics