矩阵链相乘

来源:互联网 发布:mac ps如何导入字体 编辑:程序博客网 时间:2024/06/06 19:27
/*矩阵链相乘问题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;}


 
原创粉丝点击