题目解析
城市群数量_牛客题霸_牛客网
当解决这个问题时,首先需要理解题目要求。题目中给出了一个城市之间的邻接矩阵,矩阵中的元素表示城市之间是否直接相连。如果两个城市直接相连,或者通过其他城市间接相连,它们就属于同一个城市群。
思路分析
为了解决这个问题,图的遍历可以使用深度优先搜索(DFS)或者广度优先搜索(BFS)来遍历城市,并标记城市所属的城市群。具体步骤如下:
- 创建一个布尔类型的数组
visited
,用于标记每个城市是否被访问过。- 遍历所有城市,对于每个未被访问过的城市,进行深度优先搜索或者广度优先搜索,并标记所有与该城市直接或间接相连的城市为同一个城市群。
- 统计不同的城市群数量。
代码实现
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param m int整型ArrayList<ArrayList<>>* @return int整型*/int n,count;boolean[] flags;ArrayList<ArrayList<Integer>> lists;public int citys (ArrayList<ArrayList<Integer>> lists) {this.lists = lists;if (lists == null || lists.isEmpty()) {return 0;}n = lists.size();flags = new boolean[n];for (int i = 0; i < n; i++) {if (!flags[i]) { //把所有没被标记的都遍历一遍count++;dfs(i);}}return count;}private void dfs(int pos) {flags[pos] = true;//已经搜索过了for (int i = 0; i < n; i++) {//搜索出所有与pos相邻的房子if (!flags[i] && lists.get(i).get(pos) == 1) {dfs(i);}}}
}