• leetcode 547. Number of Provinces 省份数量(中等)


    一、题目大意

    标签:搜索

    https://leetcode.cn/problems/number-of-provinces

    有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

    省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

    给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

    返回矩阵中 省份 的数量。

    示例 1:

    输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
    输出:2

    示例 2:

    输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]]
    输出:3

    提示:

    • 1 <= n <= 200
    • n == isConnected.length
    • n == isConnected[i].length
    • isConnected[i][j] 为 1 或 0
    • isConnected[i][i] == 1
    • isConnected[i][j] == isConnected[j][i]

    二、解题思路

    每个人看作是一个点,每个人与他人的联系看作是一条线,即n条线,包括自己与自己的关系。这样每个节点最多n条边最少1条边。

    三、解题方法

    3.1 Java实现

    public class Solution {
        public int findCircleNum(int[][] isConnected) {
            int M = isConnected.length;
            int num = 0;
            boolean[] visited = new boolean[M];
            for (int i = 0; i < M; i++) {
                if (!visited[i]) {
                    dfs(isConnected, i, visited);
                    num++;
                }
            }
    
            return num;
        }
    
        private void dfs(int[][] isConnected, int i, boolean[] visited) {
            visited[i] = true;
            for (int j = 0; j < isConnected[0].length; j++) {
                if (isConnected[i][j] == 1 && !visited[j]) {
                    dfs(isConnected, j, visited);
                }
            }
        }
    }
    

    四、总结小记

    • 2022/6/1 白天越来越长,四川雅安连发地震 最大6.1级。。。
  • 相关阅读:
    LeetCode Algorithm
    实现QObject与JavaScript通讯(基于QWebEngine + QWebChannel)
    Linux工具参考篇(网摘)
    GO 语言简介(网摘)
    Qt窗体引用window自带阴影边框效果
    无插件VIM编程技巧(网摘)
    ASP.NET 5基础之中间件
    ASP.NET Core 1.0基础之应用启动
    理解ASP.NET 5 Web Apps
    DNX 概览
  • 原文地址:https://www.cnblogs.com/okokabcd/p/16335540.html
Copyright © 2020-2023  润新知