leetcode_547 省份数量

该题主要运用了图的连通性 接着使用染色法解决该问题

染色法:标记所有节点为false 访问后 将其标记位true

复制代码
class Solution {
    int n;            // 代表n个数据
    bool colors[201]; // 标记是否访问到

    void dfs(vector<vector<int>>& isConnected, int u) { // u代表从哪个点开始访问
        if (colors[u]) { // 递归终止条件:该节点已经被访问
            return;
        }
        colors[u] = true; // 标记位以访问

        for (int i = 0; i < n; ++i) {
            if (isConnected[u][i]) {
                dfs(isConnected, i);
            }
        }
    }

public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        n = isConnected.size();
        memset(colors, false, sizeof(isConnected)); // 初始化全部为未访问
        int cnt = 0;
        for (int i = 0; i < isConnected.size(); ++i) {
            if (colors[i] == false) {  //只访问未访问过的节点
                dfs(isConnected, i);
                ++cnt;
            }
        }
        return cnt;
    }
};

在递归过程中 开始由于判断错了一个条件 导致不能通过全部案例

复制代码
for (int i = 0; i < n; ++i) {
            if (isConnected[u][i]) {
                dfs(isConnected, i);
            }
        }

写成了

复制代码
for (int i = u + 1; i < n; ++i) {
            if (isConnected[u][i]) {
                dfs(isConnected, i);
            }
        }

我想的是这个节点既然是连通的 那么必将是先访问数字小的节点 在访问数字大的节点 我这么写之后 错了 我以为是 数组越界的问题 但是这个i如果超出了数组的边界不会进去for循环内部 我又把 这一句改为 i = u 我觉得就是没有必要去继续访问比自己小的节点了 但是忽略了一个问题 就是小的节点可能直接和一个更大的节点相连 并没有和另一个小的相连 这样子的话 传入的起始节点就会很大 但是大的节点和另一个小的相连了 但是访问不到 导致得到结果偏大的问题

例如下面的这个案例

如果按照错误的执行 将是这样子的 执行顺序

得到的结果会是2 正确是1

正确的执行顺序

相关推荐
塔楼19 小时前
VGGT(Visual Geometry Grounded Transformer)解析
深度学习·算法·3d
云里雾里!19 小时前
力扣350. 两个数组的交集 II
数据结构·算法·leetcode
Coder_Boy_20 小时前
基于SpringAI的智能考试系统设计总结 续
人工智能·spring boot·算法
jiaozi_zzq20 小时前
2026 高职大数据管理与应用专业就业方向有哪些
大数据·职场和发展·数据分析·证书
颜酱20 小时前
用填充表格法-理解01背包及其变体问题
前端·javascript·算法
踏浪无痕20 小时前
监控不是日志:Prometheus 高基数避坑指南
后端·算法·监控
Evand J20 小时前
【2026课题推荐】复杂环境下,无人车协同定位与路径规划算法(附MATLAB例程演示)
开发语言·算法·matlab
ada7_20 小时前
LeetCode(python)39.组合总和
开发语言·数据结构·python·算法·leetcode·职场和发展
cuijiecheng201820 小时前
将unsigned char *或unsigned char []转换为std::string
开发语言·c++·算法
Yzzz-F20 小时前
[模板]线段树2 (区间乘 + 区间加 + 区间求和)
算法·线段树