题目
解题
这道题与海岛不一样,海岛题中的每一个点都是随机的。但是这个是关系图,每一列代表一个节点,而这一列的每一行代表与其他节点的关系。而且相连的几个城市会组成一个省份,没有与其他城市相连的城市自己是一个省份。我们需要知道的是有几个省份,那吗就应该让每一列出现的次数为1,高于这个次数说明该产城市重复出现,也就是与其他城市相连
/*** @param {number[][]} isConnected* @return {number}* 与海岛题不一样,海岛是随机在海里的,* 省份中城市是有连在一起的。* 所以每一列代表一个城市同时代表那个城市与之相连*/var findCircleNum = function(isConnected) {let len = isConnected.length;let total = 0;// 一个城市就是一列, 防止其重复出现let set = new Set();for(let r = 0; r < len; r++) {if(!set.has(r)) {dfs(isConnected, r, set)total++;}}return total;};var dfs = (isConnected, r, set) => {const len = isConnected.length;for(let c = 0; c < len; c++) {// 当为1 说明该城市说明有相连, 将其列号保存起来if(isConnected[r][c] === 1 && !set.has(c)) {set.add(c); // 保存城市的列号// 判断该行的其他列dfs(isConnected, c, set)}}}


