LeetCode-547. Number of Provinceshttps://leetcode.com/problems/number-of-provinces/
题目描述
There are n
cities. Some of them are connected, while some are not. If city a
is connected directly with city b
, and city b
is connected directly with city c
, then city a
is connected indirectly with city c
.
A province is a group of directly or indirectly connected cities and no other cities outside of the group.
You are given an n x n
matrix isConnected
where isConnected[i][j] = 1
if the ith
city and the jth
city are directly connected, and isConnected[i][j] = 0
otherwise.
Return the total number of provinces.
Example 1:
Input: isConnected = [[1,1,0],[1,1,0],[0,0,1]] Output: 2
Example 2:
Input: isConnected = [[1,0,0],[0,1,0],[0,0,1]] Output: 3
Constraints:
1 <= n <= 200
n == isConnected.length
n == isConnected[i].length
isConnected[i][j]
is1
or0
.isConnected[i][i] == 1
isConnected[i][j] == isConnected[j][i]
解题思路
【C++】
1. DFS+visited标记
class Solution {
public:
int findCircleNum(vector<vector<int>>& isConnected) {
int n = isConnected.size(), count = 0;
vector<bool> visited(n, false);
for (int i=0; i<n; i++) {
if (!visited[i]) {
dfs(isConnected, i, visited);
++count;
}
}
return count;
}
void dfs(vector<vector<int>>& isConnected, int i, vector<bool>& visited) {
visited[i] = true;
for (int k=0; k<isConnected.size(); ++k) {
if (isConnected[i][k] == 1 && !visited[k])
dfs(isConnected, k, visited);
}
}
};
2. DFS直接修改
class Solution {
public:
int findCircleNum(vector<vector<int>>& isConnected) {
int count = 0;
for (int i=0; i<isConnected.size(); i++) {
if (isConnected[i][i] == 1) {
dfs(isConnected, i);
++count;
}
}
return count;
}
void dfs(vector<vector<int>>&M, int i) {
for (int j=0; j<M.size(); j++) {
if (M[i][j]==1) {
M[i][j]=0;
M[j][i]=0;
dfs(M,j);
}
}
}
};
【Java】
class Solution {
public int findCircleNum(int[][] isConnected) {
int count = 0;
for (int i=0; i<isConnected.length; i++) {
if (isConnected[i][i] == 1) {
dfs(isConnected, i);
++count;
}
}
return count;
}
void dfs(int[][] M, int i) {
for (int j=0; j<M.length; j++) {
if (M[i][j]==1) {
M[i][j]=0;
M[j][i]=0;
dfs(M,j);
}
}
}
}