矩阵连乘总的乘法次数

/**计算矩阵连乘的乘法次数 */
#include <iostream>
#include <string>
#include <stack>
using namespace std;
const char eoi = '#';   // 矩阵输入结束的标志,已经表达式输入的标志

struct Matrix {
    int row;
    int col;
    Matrix(int a = 0, int b = 0) {
        this->row = a;
        this->col = b;
    }
} m[26];        // 存放26个字母对应的矩阵行数和列数

stack<Matrix> s;

// 读取矩阵行数和列数,保存到数组中
void read_matrix() {
    char name;
    cin >> name;
    while (name != eoi) {
        cin >> m[name - 'A'].row >> m[name-'A'].col;
        cin >> name;
    }
}


int main() {
    cout << "input all matrix names and dimensions..." << endl;
    read_matrix();

    cout << "input expresion..." << endl;

    string expr;
    cin >> expr;
    while (expr != "#") {
        int ans = 0;
        for (int i = 0; i < expr.size(); i++) {
            char ch = expr[i];
            if (ch >= 'A' && ch <= 'Z') {
                s.push(m[ch-'A']);
            }
            // 特别要注意的地方,后出栈的在表达式左边
            // 先出栈的在表达式右边
            // 故b先出栈,然后a出栈
            else if (ch == ')') {
                Matrix b = s.top();
                s.pop();
                Matrix a = s.top();
                s.pop();
                ans += a.row * a.col * b.col;
                s.push(Matrix(a.row, b.col));
            }
            // else {
            //     // 如果是左括号不用处理
            // }
        }
        cout << "total multication time is: " << ans << endl;
        cin >> expr;
    }


    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/tanjuntao/p/8981146.html