有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。
返回矩阵中省份的数量。
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:省份数量相关推荐

  1. 算法题目——省份数量(dfs,bfs)

    题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未 ...

  2. leetcode547. 省份数量

    leetcode547. 省份数量 题目描述 链接: leetcode547. 有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连, ...

  3. leetcode 547. 省份数量(bfs)

    有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连. 省份 是一组直接或间接相连的城市,组内不含 ...

  4. leetcode 547. Number of Provinces | 547. 省份数量(图的邻接矩阵 DFS)

    题目 https://leetcode.com/problems/number-of-provinces/ 题解 本题用了图的邻接矩阵 DFS.另外,也可以用并查集来做. class Solution ...

  5. leetcode 并查集 547.省份数量/200岛屿数量

    [数据结构和算法笔记]用并查集求解等价关系_m0_52043808的博客-CSDN博客 模板: class UF { private:vector<int>father;//father数 ...

  6. 【数据结构与算法】之深入解析“省份数量”的求解思路与算法示例

    一.题目要求 有 n 个城市,其中一些彼此相连,另一些没有相连.如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连. 省份是一组直接或间接相连的城 ...

  7. LeetCode 岛屿数量

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...

  8. LeetCode 【算法专栏】 【图】

    图相关算法 有关BFS和DFS 求有权图的单源最短路径算法(Dijkstra算法) 求有权图的多源最短路径算法(Floyd算法) 最小生成树-Prim算法 leetcode 1584 连接所有点的最小 ...

  9. 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)

    [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...

最新文章

  1. java sip 携带sdp_SIP中的SDP offer/answer交换初探
  2. skimage 学习笔记
  3. IOS 学习笔记 2015-03-24 OC-API-常用结构体
  4. 一篇文章带你搞懂 DEX 文件的结构
  5. 什么是数字孪生?有哪些关键技术?现在怎么样了?
  6. 地址总线是单向还是双向_碳纤维布加固为什么选择单向布?
  7. 题解报告:hihoCoder #1175:拓扑排序·二
  8. Bokeh 风格属性设置
  9. Java基础——JVM内存模型
  10. ** 安装好的Apache服务器不能在本地计算机启动
  11. 管理感悟:衡量境界的差异
  12. vc6.0垃圾文件清理工具_C盘空间逐渐被垃圾文件填满,详细清理方法介绍
  13. uni-app 商城源码
  14. EEPROM AT24C08的操作
  15. 2022华为机试真题 C++ 实现【事件推送】
  16. 多用途手机登录页面模板
  17. Python爬虫教程——入门一之爬虫基础了解
  18. DDL,DQL,DML,DCL全称
  19. 报告|中国智能音箱已入局全球市场,双重商业模式迅速扩张
  20. 第一届PyCon China小记

热门文章

  1. pc端,使用jsignature,实现签名功能
  2. Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频)
  3. 开源的渗透工具—Sqlmap
  4. c语言china大写变小写,英语字母大写小写
  5. FSW之Static Measurements
  6. labelme标注的数据分析
  7. JS判断两个数组是否相等
  8. 惠普星Book Pro14电脑用U盘怎么安装系统教学
  9. 【iOS开发进阶】-RunTime
  10. 深入了解parentNode,parentElement,childNodes,children的区别,一看就懂