You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段代码是什么语言?功能是什么?求详解及C++实现版本

代码功能解析与C++版本实现

原代码说明

这段代码是Pascal/Delphi风格的代码,核心功能是计算关系的传递闭包——对应离散数学里,用邻接矩阵表示集合元素间的二元关系后,通过这个算法补全所有间接存在的关系。

核心逻辑拆解

假设M是一个n×n的布尔矩阵(元素为真/假),M[r,c] = true表示集合中第r个元素和第c个元素存在直接关系:

  1. 外层循环遍历每个中间节点c
  2. 中层循环遍历每个起始节点r
  3. 如果r和c存在直接关系(M[r,c]为真),就进入内层循环:
    • 遍历所有目标节点k,执行M[r,k] := M[r,k] or M[c,k]
    • 这句的意思是:如果原本r能直接到k,或者r能到c且c能到k(也就是r可以通过c间接到达k),就把M[r,k]标记为真。本质是把c的所有可达节点,合并到r的可达集合中。

反复执行这个过程后,最终的M矩阵就是原关系的传递闭包——所有直接/间接存在的关系都会被标记出来。

对应的C++版本

下面是等价的C++实现,这里提供两种下标风格:

1-based下标(和原代码逻辑完全对齐)

#include <vector>
using namespace std;

void computeTransitiveClosure(vector<vector<bool>>& M, int n) {
    for (int c = 1; c <= n; ++c) {
        for (int r = 1; r <= n; ++r) {
            if (M[r][c]) {
                for (int k = 1; k <= n; ++k) {
                    M[r][k] = M[r][k] || M[c][k];
                }
            }
        }
    }
}

0-based下标(C++更常用的写法)

#include <vector>
using namespace std;

void computeTransitiveClosure(vector<vector<bool>>& M, int n) {
    for (int c = 0; c < n; ++c) {
        for (int r = 0; r < n; ++r) {
            if (M[r][c]) {
                for (int k = 0; k < n; ++k) {
                    M[r][k] = M[r][k] || M[c][k];
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者smrcekp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:05:23