Ex 5_21 无向图G=(V,E)的反馈边集..._第九次作业

根据题意,求的是最大生成树。利用Kruskal算法,对边进行从大到小的顺序进行排序,然后再依次取出边加入结果集中。假设图有n个顶点,那么,当结果集中有n-1条边时,剩下的边的集合即为反馈边集。
package org.xiu68.ch05.ex9; import java.util.ArrayList;
import java.util.Comparator; public class Ex5_21 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] edges=new int[][]{
{0,2,1,6},
{2,0,5,3},
{1,5,0,4},
{6,3,4,0}
};
ArrayList<String> vexs=new ArrayList<>();
for(int i=0;i<4;i++)
vexs.add("v"+i);
MGraph<String> m1=new MGraph<String>(4,4,edges,vexs);
m1.kruskal();
//运行结果
/*
(0,3):6
(1,2):5
(2,3):4
(1,3):3
(0,1):2
(0,2):1
*************************************
反馈边集为:
(1,3):3
(0,1):2
(0,2):1
*/
}
} //边类型
class Edge{
public int head; //头顶点序号
public int tail; //尾顶点序号
public int cost; //权值 public Edge(int head, int tail, int cost) {
super();
this.head = head;
this.tail = tail;
this.cost = cost;
}
} //邻接矩阵表示图
class MGraph<T> implements Comparator<Edge>{
public int vexNum; //顶点数量
public int edgeNum; //边数量
public ArrayList<T> vexs; //顶点表
public int[][] edges; //邻接矩阵 public MGraph(int vexNum, int edgeNum, int[][] edges, ArrayList<T> vexs) {
this.vexNum = vexNum;
this.edgeNum = edgeNum;
this.edges = edges;
this.vexs=vexs;
} //返回反馈边集
public void kruskal(){
ArrayList<Edge> eds=new ArrayList<>();
//初始化边集数组
for(int i=0;i<edges.length;i++){
for(int j=i+1;j<edges[i].length;j++){
if(edges[i][j]==0)
continue;
Edge e=new Edge(i,j,edges[i][j]);
eds.add(e);
}
} //对边集数组进行排序
eds.sort(this); for(int i=0;i<eds.size();i++)
System.out.println("("+eds.get(i).head+","+eds.get(i).tail+"):"+eds.get(i).cost); ArrayList<Edge> resultSet=new ArrayList<>(); //存放反馈边集
int[] components=new int[vexNum]; //并查集
for(int i=0;i<vexNum;i++)
components[i]=i; int k=0,j=0;
while(k<vexNum-1){ int h1=eds.get(j).head;
int t1=eds.get(j).tail;
int com1=components[h1];
int com2=components[t1]; //在不同的并查集
if(com1!=com2){
k++;
for(int i=0;i<vexNum;i++){
if(components[i]==com2)
components[i]=com1;
}
}else{
//反馈边集
resultSet.add(eds.get(j));
}
j++;
} //找到n-1条边后,剩下的边也属于反馈边集
for(int i=j;i<eds.size();i++)
resultSet.add(eds.get(i)); System.out.println("*************************************");
System.out.println("反馈边集为:");
for(int i=0;i<resultSet.size();i++)
System.out.println("("+resultSet.get(i).head+","+resultSet.get(i).tail+"):"+resultSet.get(i).cost);
} @Override
public int compare(Edge e1, Edge e2) {
// TODO Auto-generated method stub
//按从大到小排序
if(e1.cost<e2.cost)
return 1;
else
return -1;
}
}
Ex 5_21 无向图G=(V,E)的反馈边集..._第九次作业的更多相关文章
- ubuntu64位系统编译时头文件找不到的问题(可以查看g++ -v路径,设置export C_INCLUDE_PATH,CPLUS_INCLUDE_PATH)
今天编译webrtc时出现以下错误: ninja -C out/Debug Allninja: Entering directory `out/Debug'[1/6] CXX obj/talk/app ...
- Ex 4_10 给定一个有向图G=(V,E),其中边...(bellman-ford算法的应用).._第十二次作业
在bellman-ford算法中,循环n-1(n为顶点个数)次可以找出从源点到其他顶点的最多n-1条边的最短路径,若循环k次则可以找出从源点到其他顶点的最多k条边的最短路径. package org. ...
- 封装一些常用的js工具函数-不定时更新(希望大家积极留言,反馈bug^_^)
/*华丽------------------------------------------------------------------------------------------------ ...
- Ex3_7无向图二部图_十一次作业
(a) 从图中的某个顶点做深度优先遍历,并将不同层的顶点标记为红黑两种颜色,使得每条树边的两个顶点的颜色都不相同,如果遇到一条回边并且两个顶点的颜色都相同则说明图不是二部图. (b)如果存在一个长度为 ...
- 【NLP】前戏:一起走进条件随机场(一)
前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...
- 从Random Walk谈到Bacterial foraging optimization algorithm(BFOA),再谈到Ramdom Walk Graph Segmentation图分割算法
1. 从细菌的趋化性谈起 0x1:物质化学浓度梯度 类似于概率分布中概率密度的概念.在溶液中存在不同的浓度区域. 如放一颗糖在水盆里,糖慢慢溶于水,糖附近的水含糖量比远离糖的水含糖量要高,也就是糖附近 ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
随机推荐
- react性能检测与优化
网页运行最重要的是速度快嘛,那我们怎么知道网页运行的时候,哪些部分快哪些部分慢呢? 我们可以安装react性能检测工具进行检测,通过安装 然后修改app/index.jsx文件 ,在要检测的组件运行之 ...
- 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)
这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用. 原文网址为:http://imonad.com/rbm/ ...
- textarea 字体限制,超出部分不显示并及时显示还剩字体个数
1)HTML <textarea class="box" ></textarea > 2)JQ: $(function(){ $(".box&qu ...
- JSONObject的toBean 和 fromObject
public static void main(String[] args) { Map map=new HashMap(); map.put("我","妹") ...
- Elasticsearch5.5 部署Head插件
Elasticsearch5.5 部署Head插件 1.git下载软件包 yum -y install git git clone git://github.com/mobz/elasticsearc ...
- OS + CentOS 7 / centos 7 / config / configuration / rescue / rc.local / yum
s centos7开启网卡功能 https://blog.csdn.net/nkd50000/article/details/78903479 网卡默认是关闭的,未分配ip地址,解决办法: 1.修改文 ...
- Spark记录-SparkSql官方文档中文翻译(部分转载)
1 概述(Overview) Spark SQL是Spark的一个组件,用于结构化数据的计算.Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布式SQL查 ...
- zabbix微信预警出现的问题
系统环境:centos7.3 zabbix_server: 3.0.3 3.0.6 问题描述 zabbix预警突然不能发送微信,需要修复 排查步骤 1. 检查微信企业平台应用的key是否过期,结果没过 ...
- docker入门(三)
docker容器IP"暴露"到外网(宿主机外) 首先将docker容器IP固定 Docker自身的4种网络工作方式,简略说明下: host模式,使用--net=host指定. co ...
- JavaScript之Array/数组小结
MDN-Array的属性/方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Arr ...