UVa442 Matrix Chain Multiplication(矩阵链乘) 栈对于表达式求值的特殊作用
栈对于表达式求值的特殊作用 ,这里根据自己的理解加了注释
#include
#include
#include
#include
using namespace std;
class Matrix{
public:
Matrix(int a=0,int b=0):a(a),b(b) {}
int a,b;
} m[26];
stack s;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){ string name; cin>>name;
int k=name[0]-'A'; //化字母为数字进行储存和处理
cin>>m[k].a>>m[k].b;
}
string expr;
while(cin>>expr){
int len=expr.length(); // 这里length()和size()的区别
bool error=false; //用来返回程序执行情况
int ans=0;
for(int i=0;i<len;i++){
if(isalpha(expr[i])) s.push(m[expr[i]-'A']);
else if(expr[i]=')'){
Matrix m2=s.top(); s.pop(); //后入先出
Matrix m1=s.top(); s.pop(); //先入后出
if(m1.b!=m2.a) {error=true;break;}
ans+=m1.a*m1.b*m2.b;
s.push(Matrix(m1.a,m2.b)); //把等到的 新矩阵 重新构造为Matrix对象,并入栈
}
}
if(error) printf("errorn");
else printf("%dn",ans);
}
return 0;
}
非特殊说明,本站所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
- THE END -
最后修改:2024年11月16日
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uva442-matrix-chain-multiplication/
共有 0 条评论