#include <iostream>
#include <stack>
using namespace std;
struct Matrix {
char ch;
int row;
int col;
};
//使用栈的特性(先进后出),忽略'(',遇到矩阵则入栈,遇到')'则将栈顶两个矩阵取出,计算乘积,并入栈
int main() {
int num = 0;
cin >> num;
Matrix mvec[num];
for(int i = 0; i < num; i++)
cin >> mvec[i].ch >> mvec[i].row >> mvec[i].col;
stack<Matrix> chstack;
string line;
while(cin >> line) {
long sum = 0;
Matrix temp;
char c;
bool flag = false;
for(int i = 0; i < line.size(); i++) {
c = line[i];
if(c >= 'A' & c <='Z') {
for(int j = 0; j < num; j++)
if(mvec[j].ch == c)
chstack.push(mvec[j]);
}
if(c == ')') {
Matrix second = chstack.top();
chstack.pop();
Matrix first = chstack.top();
chstack.pop();
if(first.col != second.row) {
flag = true;
break;
}
sum += first.row * first.col * second.col;
temp.ch = '*';
temp.row = first.row;
temp.col = second.col;
chstack.push(temp);
}
}
if(flag) cout << "error" << endl;
else cout << sum << endl;
while(!chstack.empty()) chstack.pop(); //将栈清空,以便下次使用!!!!
}
return 0;
}zoj 1094 Matrix Chain Multiplication
最新推荐文章于 2019-09-26 19:42:29 发布
本文探讨了利用栈的先进后出特性来优化矩阵运算的过程,通过实例展示了如何在输入序列中识别矩阵并进行乘法运算,确保运算符合矩阵乘法规则。文章深入分析了算法的实现细节,包括读取矩阵元素、处理括号和计算最终结果的步骤,同时提供了错误处理机制以确保算法的鲁棒性。
491

被折叠的 条评论
为什么被折叠?



