前一阵子看到新人被踢,身为小白的我瑟瑟发抖
之前发了三个帖子,违规了两个,但是为了在这里活下去。
我还是舔着脸来了。
这篇推文主要介绍的是用Prim和Kruskal算法实现最小生成树,同时界面显示实现过程。采用的java技术点主要包括:
1.IO流读取txt文件,获取所用数据;读取图片,为主页添加title。
2.javaGUI中Jframe窗口和Jpanel面板的基本参数设计以及Graphics画笔画出点与距离等数据。 3.List<Object>集合,用来存储边的对象
上图是此项目的包结构:1.com.kruskal: Edge.java:边的类,含有属性包括边的开始点begin,边的结束点end,边的权值weight.
Kruskal.java:主要实现Kruskal算法的类
KruskalMap:用来实现Kruskal算法的界面
2.com.prim: Prim.java:实现Prim算法的类
PrimMap.java:实现Prim算法的界面
3.com.paint: PaintLine:用来画边的类
PaintPoint:用来画点的类
4.com.res: ReadRes.java:主要实现读取txt文件,返回二维数组
5.com.test: MainApp.java:主类,同时含有主界面,用来选择Prim或Kruskal算法。
6.JRE System Library: 工程创建时便有,主要存放J2SE的标准jar包。7.JUtil4: coding过程中导入的测试包
8.img: 含有工程中所需要的图片
9.txt: 包含TXT文件,是工程中的数据源
接下来提取主要代码仅供大家学习参考:
主类的实现及界面展示:
Prim算法主要实现思想:找到一个点出发,寻找最小连接边加入这个点,组成一个集合,在找剩下的最小连接边加入集合...直到找不到最小连接边。 在这个类中需要提及的是,我们根据点击次数进行遍历,每次返回需要画的点和边进行绘制。
Kruskal算法主要实现思想:根据边的权值排序,从最小边出发依次遍历,不成环便加入最小树...直到找不到最小连接边。 在这个类中需要提及的是:不同于Prim算法,这个算法使用了集合,对象,简化了编程。 public int find(int[] parent, int index) { while (parent[index] > 0) { index = parent[index]; } return index; } 这个方法是此算法的精髓所在,主要用来判断是否成环,思想就是寻找一条边的两个点的终点是否相等,相等便成了环。
[Java] javaGUI实现最小生成树
最新推荐文章于 2024-01-22 20:51:33 发布