使用了递归之后,时间复杂度都会变为O(n)或者O(logN)
1、深度优先
public static void main(String[] args) {
System.out.println(getProvince(new int[][]{{1, 1, 0}, {1, 1, 0}, {0, 0, 1}}));
}
public static int getProvince(int[][] cityiesConnected){
int cities = cityiesConnected.length;
boolean[] visited=new boolean[cities];
int provinces=0;
for (int i = 0; i < cities; i++) {
if (!visited[i]){
dfs(i,cities,visited,cityiesConnected);
provinces++;
}
}
return provinces;
}
private static void dfs(int i, int cities, boolean[] visited, int[][] cityiesConnected) {
for (int j = 0; j < cities; j++) {
if (cityiesConnected[i][j]==1 && !visited[j]){
visited[j]=true;
dfs(j,cities,visited,cityiesConnected);
}
}
}
这个递归还是有点不太懂,还是调试好懂一些。这里的精髓在与你找到城市就在此城市继续dfs,标志,然后是你如果都标志的话,那么只会走一次proinces++而已,这就是为什么可以统计。
2、广度优先
待补充…
3、并查集
待补充…
|