poj 2246Matrix Chain Multiplication

/* 解题报告: 1、用栈模拟乘法,控制计算顺序 2、这种输入模式的输入方法 */ #include <iostream> #include <map> #include <stack> using namespace std; struct Node { int rows,cols; }; map<char, Node> matrixs; int main() { int n; char name; cin>>n; for(int i=0; i<n; i++) { cin>>name; cin>>matrixs[name].rows>>matrixs[name].cols; } string exp; //这种输入模式的输入方法 while(cin>>exp) { stack<Node> stck; int nCount = 0;//计算相乘的总次数 int i; for(i=0; i<exp.size(); i++) { if('(' == exp[i]) continue; if(')' == exp[i]) { Node b = stck.top(); stck.pop(); Node a = stck.top(); stck.pop(); if(b.rows != a.cols) { cout<<"error"<<endl; break; } nCount += a.rows * a.cols * b.cols; a.rows = a.rows; a.cols = b.cols; stck.push(a); } else stck.push(matrixs[exp[i]]); } if(i == exp.size()) cout<<nCount<<endl; } return 0; }

你可能感兴趣的:(String,Matrix)