从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
相关产品推荐
相关产品推荐

