leetcode547. 省份数量

news/2024/7/20 20:01:04 标签: 深度优先, 算法, 图论

有 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

思路:

1、我们这道题因为是要找到城市的周边,而在矩阵中第i行和第i列都表示这个城市,因此矩阵是对称的,我们只需要遍历行或者列就行。
2、假如我们先从第0行开始遍历,为了防止重复遍历,我们需要一个visited[]来判断是否已经遍历过了。同时我们还需要一个值用来记录province的数量。
3、首先找到第一个未被遍历的城市,然后进入dfs。
4、dfs中的 j 如果未被遍历同时isConnected值为1,说明和第 i 个城市连通。标记为visited
5、那与第 j 个城市连通,自然也与第 i 个城市也连通,所以继续向下遍历。
而所有递归完成后与第 i 个城市连通的所有城市都为visited,再查找到的就是新的省份了。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void dfs(vector<vector<int>>& graph, int i, vector<bool>& visited) {
	
	for (int j = 0; j < graph[0] .size(); j++)
	{
		if (graph[i][j] == 1 /*&& i != j */&& visited[j] == false)//找到顶点i的一个未访问相邻点j
		{
			visited[j] = true;
			dfs(graph, j, visited);
		}
	}
}

int findCircleNum(vector<vector<int>>& isConnected) {
	int size = isConnected.size();
	vector<bool> visited(size,false);//因为邻接矩阵表示无向图时候的对称性,用一维数组表示
	int res = 0;
	for (int i = 0; i < size; i++)
	{
		if (visited[i] == false)
		{
			visited[i] = true;
			res++;
			dfs(isConnected, i, visited);
		}
	}
	return res;
}

int main() {
	vector<vector<int>> graph{ {1,1,0},{1,1,0},{0,0,1} };
	int res = findCircleNum(graph);
	cout << res << endl;
	return 0;
}

http://www.niftyadmin.cn/n/242808.html

相关文章

课程4:ASP.NET Core 身份验证 - JWT

课程简介目录 🚀前言一、JWT介绍1.1 JWT定义1.2 JWT格式二、JWT 与 Cookie 有何区别,该如何选择?三、Web API采用JWT验证的示例3.1 安装JWT依赖3.2 开启JWT身份验证3.2 登录并返回token3.3 测试:获取用户信息接口四、最后🚀前言 本文是《.Net Core从零学习搭建权限管理…

nodejs+vue宠物商城健康医院挂号服务管理系统python+java+php

在前台&#xff0c;首先提供一个界面清晰、导航明确的首页&#xff0c;无论是会员还是游客都可以访问。游客通过首页查看该网站所要具备的功能&#xff0c;以及对应的周边商城信息&#xff0c;特别在周边商城模块&#xff0c;需要明确的进行介绍&#xff0c;突出周边商城特色和…

IIC协议相关

一.IIC协议初识 IIC(集成电路总线)&#xff0c;半双工同步通信方式 *特点 1.简单性和有效性 由于接口直接在组件之上&#xff0c;因此IIC总线占用的空间特别小&#xff0c;减少了电路板的空间和芯片管脚的数量&#xff0c;降低了互联成本&#xff0c;总线的长度可高达25英尺…

2023-04-20 mysql-子查询中嵌套join上拉平坦-分析

摘要: mysql/sql的查询优化器, 会将子查询中的嵌套join进行上拉,形成一个平坦的join列表. 这样形成一个平坦的join的列表, 便于两两之间逐个的join操作. 本文对其进行分析. 参考: MySQL :: MySQL 8.0 Reference Manual :: 8.2.1.8 Nested Join Optimization DML: 创建表: C…

java健身房会员签到,会员提醒,留言,消费,公告

1. 主页&#xff1a;即时登录,提供会员和管理员的登录。 2. 会员卡办理&#xff1a;登记健身会员的信息,设置卡到期时间。 3. 会员消费系统&#xff1a;对健身会员的日常消费进行添加。 4. 在线交流&#xff1a;健身会员之间的交流,管理员可以对其问题进行回复。 5.提醒功能&am…

Linux crontab命令:循环执行定时任务

在介绍 crontab 命令之前&#xff0c;我们首先要介绍一下 crond&#xff0c;因为 crontab 命令需要 crond 服务支持。crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程 crontab命令介绍 crontab 命令是通过 /etc/cron.allow 和 /etc/cron.deny 文件来…

C# ArrayList

ArrayList 是 System.Collections 命名空间中的一个类&#xff0c;是一个可动态增长和缩减的数组。与 C# 数组不同&#xff0c;ArrayList 可以自动扩容&#xff0c;并支持动态插入和删除元素&#xff0c;可以存储任何类型的对象。 使用 ArrayList 的步骤如下&#xff1a; 引入…

软考-项目资源管理(十三)

项目团队是执行项目工作&#xff0c;以实现项目目标的一组人员&#xff0c;由为了完成项目而承相不同角色与职责的人员组成 项目管理团队(Project Management Team)是直接参与项目管理活动的项目团队成员&#xff0c;负责项目管理和领导活动&#xff0c;如各项目阶段的启动、规…