UVA-442数据结构调用栈,注意括号的处理

来源:互联网 发布:北京110网络报警平台 编辑:程序博客网 时间:2024/05/29 18:26

此处一定要注意当遇到后括号的时候就计算,因为一对括号中至多包含两个矩阵,及时去掉括号,还是看了clevermike的博客后才弄懂的

#include<iostream>#include<string>#include<stdio.h>#include<stack>using namespace std;int n;struct Node{    int l,r;}node[300];char ch;int a,b,ans,t,i;string str;stack<int>s1;stack<char>s2;int main(){    cin>>n;    while(n--)    {        cin>>ch>>a>>b;        node[ch-'A'].l=a;node[ch-'A'].r=b;    }    getchar();    while(getline(cin,str))    {        ans=0;t=31;        int len=str.length();        for( i=0;i<len;i++)        {            if(str[i]=='('||str[i]==')')            {                s2.push(str[i]);                if(str[i]==')')                {                    if(!s1.empty())                    {                        int g,h;                        h=s1.top();s1.pop();                        g=s1.top();s1.pop();                        if(node[g].r!=node[h].l)break;                        ans+=node[g].l*node[g].r*node[h].r;                        node[t].l=node[g].l;                        node[t].r=node[h].r;                        s1.push(t);                        t++;                        s2.pop();s2.pop();                    }                }            }            else s1.push(str[i]-'A');        }        if(i<len)cout<<"error"<<endl;        else cout<<ans<<endl;    }}

0 0
原创粉丝点击