算法练习_图的连通性问题(JAVA)
一.问题
1.问题描述:
有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系。
动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最简单的方式表示图的连通性。2.实现方案:设计数据结构保存已经存在的整数对,并且用他们来判断新数对是否满足新相连关系。
3.实例应用:网络连接问题,电子触电设计,社交网络关系等等
二.解决
1.定义问题--设计api
| public class UF//(类名大写) | ||
| (构造方法) | UN(int N) | 初始化0-N个触点 |
| void | union(int p,int q) | 在两点之间建立连接 |
| int | find(int p) | 在触点集中找到p |
| boolean | connected(int p,int q) | 判断触点p,q是否相连 |
| int | count() | 连通分量的计数 |
2.方案设计
<一>两个变量
count--用于连通分量的计数&&id[]--数组下标表示连通分量
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
初始化时下标默认为自身下标
在输入连通关系后(3,4),(5,6)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 0 | 1 | 2 | 4 | 4 | 6 | 6 | 7 | 8 | 9 |
将所以id[3]相同的下标修改为id[4]
从而表示数组的相连关系
1.quick-find
public int find(int p){
return id[p];
}
//对两点进行连接
public void union(int p,int q){
int pid=find(p);
int qid=find(q);
if(pid==qid)return;//直接return用于方法的推出
for(int i=0;i<id.length;i++)
if(id[i]==pid)id[i]=qid;
count--;
}
每次union需要访问数组(N+3)到(2N+1)次
2.quick-union
private int find(int p){
while(p!=id[p]){//找出根结点
p=id[p];
}
return p;
}
private void union(int p,int q){
int prot=find(p);
int qrot=find(q);
if(qrot==prot)return;
id[qrot]=prot;
count--;
}
3.union-find算法,加权
public class UF {
private int[] id;
private int[] sz;
private int count;
//初始化
public UF(int N){
count=N;
id=new int[N];
sz=new int[N];
for(int i=0;i<N;i++){
id[i]=i;
sz[i]=1;
}
}
private int find(int p){
while(p!=id[p]){//找出根结点
p=id[p];
}
return p;
}
private void union(int p,int q){
int i=find(p);
int j=find(q);
if(i==j)return;
if(sz[i]<sz[j]){
id[i]=j;sz[j]+=sz[i];
}else{
id[j]=i;sz[i]+=sz[j];
}
count--;
}
//对联通分量进行计数
public int count(){return count;}
//判断是否连接
public boolean connected(int p,int q){
return find(p)==find(q);
}
}
算法练习_图的连通性问题(JAVA)的更多相关文章
- java数据结构_笔记(5)_图的算法
图的算法 1 图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次.遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 2 深度优先遍历从图中某个顶点V 出发 ...
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { pro ...
- Kosaraju 算法检测有向图的强连通性
给定一个有向图 G = (V, E) ,对于任意一对顶点 u 和 v,有 u --> v 和 v --> u,亦即,顶点 u 和 v 是互相可达的,则说明该图 G 是强连通的(Strong ...
- Tarjan算法:求解图的割点与桥(割边)
简介: 割边和割点的定义仅限于无向图中.我们可以通过定义以蛮力方式求解出无向图的所有割点和割边,但这样的求解方式效率低.Tarjan提出了一种快速求解的方式,通过一次DFS就求解出图中所有的割点和割边 ...
- Victoria的舞会2——图的连通性及连通分量
[Vijos1022]]Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们, ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...
- 图的连通性问题的小结 (双连通、2-SAT)
图的连通性问题包括: 1.强连通分量. 2.最小点基和最小权点基. 3.双连通. 4.全局最小割. 5.2-SAT 一.强连通分量 强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具. 有三种 ...
- POJ 2513 - Colored Sticks - [欧拉路][图的连通性][字典树]
题目链接: http://poj.org/problem?id=2513 http://bailian.openjudge.cn/practice/2513?lang=en_US Time Limit ...
随机推荐
- Java学习笔记(一)
纯属个人学习笔记,有什么不足之处大家留言,谢谢 Java程序打包与JAR运行方法 在Eclipse的"包资源管理器"视图中找到要打包成JAR文件的项目.在项目名称上单击鼠标右键,在 ...
- iOS中获取当前时间,设定时间,并算出差值
NSDate *date = [NSDate date];//获取当前时间 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 NSIntege ...
- 小猪cms ClassifyAction.class.php
<?php /** *语音回复 **/ class ClassifyAction extends UserAction{ public $fid; public function _initia ...
- ArrayList_HashSet的比较及Hashcode分析
ArrayList_HashSet的比较及Hashcode分析 hashCode()方法的作用 public static void main(String[] args) { Collectio ...
- css使absolute相对于父容器进行定位而不是以body(为什么绝对定位(absolute)的父级元素必须是相对定位(relative))
借知乎的回答如下解释: 首先,我想告诉你的是,如果父级元素是绝对定位(absolute)或者没有设置,里面的绝对定位(absolute)自动以body定位.这句话是错的.正确的是:只要父级元素设了po ...
- adb工具获取appPackage和appActivity
1,手机连接电脑,打开手机调试功能,并运行待测试APP,终端执行: adb shell 2,接着,执行: dumpsys window windows | grep -E 'mFocusedApp' ...
- maven上传jar到nexus本地仓库
一.nexus新增本地仓库 Hosted Repository:本地仓库,部署组织内部的版本内容 Proxy Repository:代理仓库,代理远程的公共仓库,如maven中央仓库 Virtual ...
- react 犯错
1. import a from './xx' 一定要有 ./ 2. export default const x={} 错 改为 const x={}; export default x; 也 ...
- Html中的文本框和单选按钮
Html中的文本框和单选按钮用来制作页面的登录注册使用.. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN& ...
- 移动端 Web 开发前端知识整理
文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...