/*矩阵链相乘问题C++代码 输入:矩阵数量 n 这些矩阵的n+1个行列数 输出:最小相乘次数 矩阵链相乘结合方式 */ #include <iostream> #include <vector> using namespace std; vector<vector<int>> m(10); vector<vector<int>> s(10); void Matrix_Chain(vector<int> p) { int length = p.size() - 1; for (int l = 2; l <= length; l++)//矩阵长度 { for (int start = 1; start <= length - l + 1; start++) { int end = start + l - 1; m[start][end] = INT_MAX; for (int k = start; k <= end - 1; k++) { int q = m[start][k] + m[k + 1][end] + p[start - 1] * p[k] * p[end]; if (q < m[start][end]) { m[start][end] = q; s[start][end] = k; } } } } } void print(int i, int j) { if (i == j) cout << char(int('A') + i - 1); else { cout << "("; print(i, s[i][j]); print(s[i][j] + 1, j); cout << ")"; } } int main() { int n, i, rc[20]; cout << "请输入矩阵个数:"; cin >> n; cout << "请依次输入这些矩阵的" << n + 1 << "个行列数:"; for (i = 0; i <= n; i++) cin >> rc[i]; vector<int> p; for (int i = 0; i <= n; i++) p.push_back(rc[i]); for (int i = 0; i < 10; i++) { m[i].resize(10); m[i][i] = 0; } for (int i = 0; i < 10; i++) s[i].resize(10); Matrix_Chain(p); int len = p.size() - 1; cout << "最少相乘次数:" << m[1][len] << endl; cout << "结合方式:"; print(1, len); cout << endl; return 0; }
矩阵链相乘
最新推荐文章于 2022-11-25 19:12:32 发布