leetcode:省份数量
package com.lz.third;import java.util.LinkedList;
import java.util.Queue;public class GroupMerge {public static void main(String[] args) {// TODO Auto-generated method stub//System.out.println(getProvince(new int[][] {{1,0,0},{0,1,0},{0,0,1}}));//System.out.println(getProvince(new int[][] {{1,1,0},{1,1,0},{0,0,1}}));//System.out.println(getProvince1(new int[][] {{1,0,0},{0,1,0},{0,0,1}}));//System.out.println(getProvince1(new int[][] {{1,1,0},{1,1,0},{0,0,1}}));System.out.println(getProvince2(new int[][] {{1,0,0},{0,1,0},{0,0,1}}));System.out.println(getProvince2(new int[][] {{1,1,0},{1,1,0},{0,0,1}}));}//深度优先private static int getProvince(int[][] isConnected) {int cities=isConnected[0].length;boolean[] visited=new boolean[cities];int provinces=0;for(int i=0;i<cities;i++) {if(!visited[i]) {dfs(i,cities,visited,isConnected);provinces++;}}return provinces;}public static void dfs(int i,int cities,boolean[] visited,int[][] isConnected) {for(int j=0;j<cities;j++) {if(isConnected[i][j]==1&&!visited[j]) {visited[j]=true;dfs(j,cities,visited,isConnected);}}}//广度优先private static int getProvince1(int[][] isConnected) {int cities=isConnected[0].length;boolean[] visited=new boolean[cities];int provinces=0;Queue<Integer> queue=new LinkedList<Integer>();for(int i=0;i<cities;i++) {if(!visited[i]) { queue.offer(i);while(!queue.isEmpty()) {int k=queue.poll();visited[k]=true;for(int j=i+1;j<cities;j++) {if(isConnected[i][j]==1&&!visited[j]) {queue.offer(j);}}}provinces++;}}return provinces;}//并查集private static int getProvince2(int[][] isConnected) {int cities=isConnected[0].length;int[] head=new int[cities];int[] level=new int[cities];for(int i=0;i<cities;i++) {head[i]=i;level[i]=1;}for(int i=0;i<cities;i++) {for(int j=i+1;j<cities;j++) {if(isConnected[i][j]==1) {merge(i,j,head,level);}}}int count=0;for(int i=0;i<cities;i++) {if(head[i]==i) {count++;}}return count;} public static void merge(int x,int y,int[] head,int[] level) {int i=find(x,head);int j=find(y,head);if(i==j) {return;}if(level[i]<=level[j]) {head[i]=j;}else {head[j]=i;}level[j]++;}public static int find(int x,int[] head){ if(head[x]==x) {return x;}head[x]=find(head[x],head);return head[x];}}
leetcode:省份数量相关推荐
- 算法题目——省份数量(dfs,bfs)
题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未 ...
- leetcode547. 省份数量
leetcode547. 省份数量 题目描述 链接: leetcode547. 有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连, ...
- leetcode 547. 省份数量(bfs)
有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连. 省份 是一组直接或间接相连的城市,组内不含 ...
- leetcode 547. Number of Provinces | 547. 省份数量(图的邻接矩阵 DFS)
题目 https://leetcode.com/problems/number-of-provinces/ 题解 本题用了图的邻接矩阵 DFS.另外,也可以用并查集来做. class Solution ...
- leetcode 并查集 547.省份数量/200岛屿数量
[数据结构和算法笔记]用并查集求解等价关系_m0_52043808的博客-CSDN博客 模板: class UF { private:vector<int>father;//father数 ...
- 【数据结构与算法】之深入解析“省份数量”的求解思路与算法示例
一.题目要求 有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连. 省份是一组直接或间接相连的城 ...
- LeetCode 岛屿数量
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...
- LeetCode 【算法专栏】 【图】
图相关算法 有关BFS和DFS 求有权图的单源最短路径算法(Dijkstra算法) 求有权图的多源最短路径算法(Floyd算法) 最小生成树-Prim算法 leetcode 1584 连接所有点的最小 ...
- 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)
[LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...
最新文章
- java sip 携带sdp_SIP中的SDP offer/answer交换初探
- skimage 学习笔记
- IOS 学习笔记 2015-03-24 OC-API-常用结构体
- 一篇文章带你搞懂 DEX 文件的结构
- 什么是数字孪生?有哪些关键技术?现在怎么样了?
- 地址总线是单向还是双向_碳纤维布加固为什么选择单向布?
- 题解报告:hihoCoder #1175:拓扑排序·二
- Bokeh 风格属性设置
- Java基础——JVM内存模型
- ** 安装好的Apache服务器不能在本地计算机启动
- 管理感悟:衡量境界的差异
- vc6.0垃圾文件清理工具_C盘空间逐渐被垃圾文件填满,详细清理方法介绍
- uni-app 商城源码
- EEPROM AT24C08的操作
- 2022华为机试真题 C++ 实现【事件推送】
- 多用途手机登录页面模板
- Python爬虫教程——入门一之爬虫基础了解
- DDL,DQL,DML,DCL全称
- 报告|中国智能音箱已入局全球市场,双重商业模式迅速扩张
- 第一届PyCon China小记