图论算法 java_图论聚类算法java实现

​​上一篇中我们实现了最小生成树算法,现在我们利用最小生成树来实现图论聚类。如果有一最小生成树如图:

a4c26d1e5885305701be709a3d33442f.png最小生成树

a4c26d1e5885305701be709a3d33442f.png剪枝后

a4c26d1e5885305701be709a3d33442f.png聚类结果

​我们要对以上六个点进行聚类,我们阈值为4,所以要剪掉权值大于等于4的边。剪掉后如图。聚类结果就是分三类。以下是代码实现:

public class Cluster {

private Graph g;

private MST ms;

public static void main(String[]args)

{

//为最小生成树建图

String path="F:\\java\\PictureCluster\\MSTdata.txt";

Graph g=new Graph();

MST ms=new MST();

ms.InitialGraph(g, path);

float temp=4;//阈值

for(int i=0;i

{

for(int j=0;j

{

if(g.arcs[i][j]

{

}

else

{

g.arcs[i][j]=100000;

}

}

}

//

List> datas = new

ArrayList>();

for(int i=0;i

{

Listlist=new ArrayList();

for(int j=0;j

{

if(g.arcs[i][j]!=100000)

list.add(g.vertex[j]);

}

datas.add(list);

}

for(int i=0;i

{

for(int j=0;j

System.out.print(datas.get(i).get(j)+" ");

System.out.println();

}

//分类

for(int i=0;i

{

for(int j=0;j

{

if (datas.get(i).contains(g.vertex[j]))

{

for(int k=0;k

{

if(!datas.get(i).contains(datas.get(j).get(k)))

{

datas.get(i).add(datas.get(j).get(k));

}

}

datas.get(j).clear();

}

}

}

System.out.println("聚类结果:");

for(int i=0;i

{

for(int j=0;j

System.out.print(datas.get(i).get(j));

System.out.println();

}

}

}

​其实这其中比较麻烦的是当剪枝后,结果我们是知道的,但是如何存储及显示比较难。所以我们就用了list的List.遍历每一个点,比如与他有关联v3的加入他的List中,再遍历他的List,查看有v3,再将v3的list与他的list合并,迭代进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值