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

从ordonnancer函数体提取矩阵c并作为参数传入的实现需求

修改后的ordonnancer函数(矩阵c改为外部传入参数)

原函数里的矩阵c是在函数内部声明初始化的,现在把它改成外部传入的参数,同时修正C++标准不支持变长数组(VLA)的问题,改用vector<vector<int>>类型:

int ordonnancer(int n, int n1, int m, vector<vector<int>>& p, vector<int>& ind, vector<vector<int>>& c) {
    int Cmax;

    // 首个任务
    for (int j = 0; j < m; j++) {
        for (int k = 0; k <= j; k++) {
            c[j][ind[0]] += p[k][ind[0]];
        }
    }

    // 首台机器
    c[0][ind[0]] = 0;
    for (int i = 0; i < n; i++) {
        for (int k = 0; k <= i; k++) {
            c[0][ind[i]] += p[0][ind[k]];
        }
    }

    for (int i = 1; i < n; i++) {
        for (int j = 1; j < m; j++) {
            c[j][ind[i]] = max(c[j][ind[i-1]], c[j-1][ind[i]]) + p[j][ind[i]];
        }
    }

    Cmax = c[m-1][ind[n-1]];

    return Cmax;
}

关键改动说明:

  • 函数参数新增vector<vector<int>>& c,用引用传递避免拷贝开销,同时允许函数修改外部传入的矩阵
  • 删除了原函数内部的int c[m][n1]声明和初始化循环,要求调用函数前必须在外部初始化好一个m行n1列、所有元素为0的vector矩阵
  • 把原函数里的p和ind也改成引用传递,避免不必要的拷贝,提升运行效率
  • 保留了原有的调度逻辑,确保功能和原函数完全一致

调用示例(外部初始化c):

// 假设n、n1、m、p、ind都已提前定义赋值
vector<vector<int>> c(m, vector<int>(n1, 0));
int maxCompletionTime = ordonnancer(n, n1, m, p, ind, c);

内容的提问来源于stack exchange,提问作者user.mokho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:40:39