UVa442 Matrix Chain Multiplication(矩阵链乘) 栈对于表达式求值的特殊作用

ProLightsfx 2015-10-29 122 10/29
UVa442 Matrix Chain Multiplication(矩阵链乘) 栈对于表达式求值的特殊作用 
Solution

栈对于表达式求值的特殊作用 ,这里根据自己的理解加了注释
 

#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 -

ProLightsfx

11月16日09:12

最后修改:2024年11月16日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论