zoukankan      html  css  js  c++  java
  • LeetCode 547. 省份数量

    题目描述

    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]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-provinces

    思路解析

    最直接的思路是采用深度优先搜索,遍历每一个省份,若该省份从未经过,则找出每一个和该省份相连的省份,并标记为 visited。并记录轮数。

    代码实现

    class Solution {
    private:
        void dfs(vector<vector<int>> &isConnected, vector<int> &visited, int i) {
            int nProvince = isConnected.size();
            for(int j = 0; j < nProvince; j++) {
                if(isConnected[i][j] == 1 && visited[j] == 0) {
                    visited[j] = 1;
                    dfs(isConnected, visited, j);
                }
            }
        }
    public:
        int findCircleNum(vector<vector<int>>& isConnected) {
            int nProvince = isConnected.size();
            vector<int> visited(nProvince);
            int ans = 0;
            for(int i = 0; i < nProvince; i++) {
                if(visited[i] == 0) {
                    dfs(isConnected, visited, i);
                    ans++;
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    Oracle 行列转换
    Oracle中特殊的INSERT语句
    在.net中实现压缩多个文件为.zip文件 【转】
    JavaScript 原型链【转】
    Oracle安装中的DHCP问题
    每日一题力扣49
    每日一题力扣423
    每日一题力扣451
    每日一题力扣237
    每日一题力扣383
  • 原文地址:https://www.cnblogs.com/xqmeng/p/14246905.html
Copyright © 2011-2022 走看看