首页 > 其他分享 >力扣 leetcode 547. 省份数量

力扣 leetcode 547. 省份数量

时间:2022-12-04 17:34:53浏览次数:101  
标签:int 城市 isConnected 力扣 相连 547 visited 省份 leetcode

问题描述

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

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

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

返回矩阵中 省份 的数量。

提示:

  • 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]

示例

示例 1:

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

示例 2:

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

解题思路

这题与力扣 leetcode 200. 岛屿数量中的解法相似,这次我们使用 BFS 来求解:

class Solution {
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        int res = 0;
        queue<int> q; // BFS 使用 queue 来记录当前遍历的状态
        vector<bool> visited(isConnected.size(), false);
        for(int i = 0; i < isConnected.size(); i++){
            if(!visited[i]){
                q.emplace(i);
                res++;
                while(!q.empty()){
                    int city = q.front();
                    q.pop();
                    for(int j = 0; j < isConnected.size(); j++){
                        if(!visited[j] && isConnected[city][j]){ // 判断省份j是否已经遍历过了
                            q.emplace(j);
                            visited[j] = true;
                        }
                    }
                }
            }
        }
        return res;
    }
};

标签:int,城市,isConnected,力扣,相连,547,visited,省份,leetcode
From: https://www.cnblogs.com/greatestchen/p/16950236.html

相关文章

  • 力扣 leetcode 200. 岛屿数量
    问题描述给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此......
  • 力扣刷题01
    704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:num......
  • 两两交换链表中的节点-LeetCode24模拟节点
    力扣链接:https://leetcode.cn/problems/swap-nodes-in-pairs/题目给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完......
  • [LeetCode] 1323. Maximum 69 Number 6和9组成的最大数字
    Youaregivenapositiveinteger num consistingonlyofdigits 6 and 9.Return themaximumnumberyoucangetbychanging atmost onedigit(6* becom......
  • leetcode.cn 17.电话号码的字母组合 - 生成组合数
    这题难度标为“中等”,那肯定不难。看完题,知道就是生成组合数。想起当年上学的时候我还做过一个组合工具类。于是在磁盘上搜索,找到一看,原来当年是Java写的一个类,代码也很简......
  • Leetcode 1796 寻找字符串中第二大的数字
    Leetcode1796寻找字符串中第二大的数字1、两次遍历(省略)2、一次遍历(max和second变量,代码省略)3、范围0-9,桶排序(代码如下)classSolution{public:intsecondHig......
  • LeetCode刷题记录.Day30
    二叉树的前序遍历递归遍历法classSolution{public:voidtraversal(TreeNode*cur,vector<int>&result){if(cur==NULL)return;//当前节点为空,终......
  • #yyds干货盘点# LeetCode程序员面试金典:旋转矩阵
    题目:给你一幅由N×N矩阵表示的图像,其中每个像素的大小为4字节。请你设计一种算法,将图像旋转90度。不占用额外内存空间能否做到? 示例1:给定matrix=[ [1,2,3],......
  • 力扣 leetcode 438. 找到字符串中所有字母异位词
    问题描述给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字......
  • LeetCode刷题笔记
    前言:我是从大四上学期开始刷算法题的,那时候比较迷茫,不知道做什么。想着提升一下自己,就看着B站代码随想录的视频,然后开始在力扣上刷题。当你陷入迷茫,不知道学什么的时候,只要......