java连通图_算法练习_图的连通性问题(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
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
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]
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)相关推荐
- java的简单算法题_[2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- java有阴历年算法吗_中国农历算法java实现
/** * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年 */ import java.text.*; import java.util.*; class Chines ...
- 关键路径例题图表_算法学习记录-图——应用之关键路径(Critical Path)
之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间. 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE).(Activity On ...
- java实现lz77算法实例_数据压缩算法---LZ77算法 的分析与实现
LZ77简介 Ziv和Lempel于1977年发表题为"顺序数据压缩的一个通用算法(A Universal Algorithm for Sequential Data Compression ...
- java的hash算法实现_一致性Hash算法的Java实现详解
package com.baijob.commonTools; import java.util.Collection; import java.util.SortedMap; import java ...
- java 进制转换算法_算法笔记_033:十六进制转八进制(Java)
packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...
- java入学测试_算法历练之路——入学考试(JAVA)
入学考试 时间限制: 1Sec 内存限制: 128MB 提交: 42 解决: 18 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界 上最伟大的医师.为此,他想拜附近最有威望的医师为师. 医师为了 ...
- 蓝桥杯_算法训练_矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 2021秋招_唯品会_算法岗_笔试_部分题目
1.单选 1.1 第一题就是求投掷均匀正六面体骰子的熵,但很惨的是我只会算到 − ∑ p × l o g ( p ) -\sum{p \times log(p)} −∑p×log(p),不知道如何继续 ...
最新文章
- scala面向对象之trait
- 产品研究:安装程序 或 移动端APP 为什么这么占用空间?
- 百度蜘蛛(BaiduSpider)IP段详细情况介绍
- 如何在rul中添加图片
- nginx rewrite 实现二级域名跳转
- poi报表导出4.1.0版本工具类 导出并下载
- django+echarts+ajax异步+显示优化--基本例子
- 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
- 《游戏程序设计模式》 2.2 - 游戏循环
- 数字体育进入黄金窗口期
- 下载keep运动软件_keep运动下载安装
- 名片管理系统java_java毕业设计_springboot框架的名片管理系统
- 1,0在js中有可能会等于true和false来去判断的
- 华为云面试指南—Rainbow
- SLAM十四讲-设计前端-0.4-代码解读
- 2020热门编程语言,总有一款适合你【云图智联】
- DNS劫持原理、dns劫持有什么办法解决、DNS劫持原理与操作
- POWER PIVOT的使用介绍2
- 支付宝app支付流程(微信支付同理)
- 英语、数学不精,还可以选择IT行业吗?
热门文章
- Windows10 的microsoft defender smartscreen怎么关闭的教程和方法?
- 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X
- 爬虫入门教程 | 使用selenium爬取微博热门数据
- 流利说 Level 5 全文
- 全球IT服务“十分天下有其一”,中软国际的底气来自何方?
- 大数据告诉你,从洛阳北大青鸟毕业的学生未来发展到底怎么样?
- 国内外计算机联锁系统的发展,车站计算机联锁系统的现状与发展
- mysql替换成对括号
- 39.(前端)欢迎页面的设置
- 微型计算机原理实验二,微机原理实验2