前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.省份数量
题目链接:547. 省份数量 - 力扣(LeetCode)
题面:
代码:
class Solution {
int[][] flag;
int n;
int[][] isConnected;
public int findCircleNum(int[][] isConnected) {
this.isConnected = isConnected;
n = isConnected.length;
flag = new int[n][n];
int ans = 0;
for(int i = 0;i<n;i++){
for(int j = i;j<n;j++){
if(flag[i][j]==0&&(isConnected[i][j]==1|i==j)){
ans++;
recursion(i);
}
}
}
return ans;
}
public void recursion(int x){
for(int i = 0;i<n;i++){
if(isConnected[x][i]==1&&flag[x][i]==0){
flag[x][i] = 1;
flag[i][x] = 1;
recursion(i);
}
}
}
}
2.寻找图中是否存在路径
题目链接:1971. 寻找图中是否存在路径 - 力扣(LeetCode)
题面:
代码:
class Solution {
List<Integer>[] map;
boolean[] flag;
public boolean validPath(int n, int[][] edges, int source, int destination) {
flag = new boolean[n];
map = new List[n];
Arrays.setAll(map,k->new ArrayList<Integer>());
for(int[] arr:edges){
int a = arr[0];
int b = arr[1];
map[a].add(b);
map[b].add(a);
}
return recursion(source,destination);
}
public boolean recursion(int source,int destination){
if(source==destination){
return true;
}
flag[source] = true;
for(int b:map[source]){
if(!flag[b]&&recursion(b,destination)){
return true;
}
}
return false;
}
}
后言
上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!