首页 > 其他 > 详细

zoj 1094 Matrix Chain Multiplication (好递归)

时间:2014-03-21 07:00:25      阅读:439      评论:0      收藏:0      [点我收藏+]

题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1094

bubuko.com,布布扣
//题目没搞懂-_-# 原来两个expression的时候必须要有括号,说白了就是单个矩阵的时候没有括号,其他情况一定都打了括号 
//利用递归函数expression进入每一个括号内,每一个括号内一定又包含两个expression

//举个例子 ( A ( BA ) )     ( ( AB ) A )   ()//不存在这样的情况,也就是说,左括号右边要么是左括号,要么是大写字母 
 
//分别递归进入这两个exp,如果是单个矩阵,则返回0和它的row和col(为了给它外面的exp计算),如果又是一个exp,则递归进入,并且返回乘法运算次数和结果的row和col
//其实就相当于返回一个 matrix结构,而这个结构是expression乘法的结果

//如果乘法不符合条件,则error=1

#include<iostream>
using namespace std;

int n;
struct matrix{
    int mult,row,col;
};
char str[100];
bool error;
int row[26],col[26];
int pos;// 注意pos一定要是公有变量 
 
//exp的定义是,单个矩阵A 或者带括号的(exp1 exp2) 
//进入exp,pos为exp的第一个字符,如果这个字符是‘(‘则递归进入exp1和exp2,如果pos是单个矩阵,则返回
 
matrix expression(){//在运行完函数体后,pos会转移到右括号处 
    matrix t;
    if(str[pos] ==(){//如果是左括号
        matrix t1,t2;
        pos++;
        t1=expression();
        t2=expression();
        pos++;
        if(error||t1.col!=t2.row)
            error=1;
        else//如果乘法是合法的 
        {
            t.row=t1.row;
            t.col=t2.col;
            t.mult=t1.row*t1.col*t2.col+t1.mult+t2.mult;
        }
    }
    else{//如果是单个矩阵 
        t.row=row[str[pos]-A];
        t.col=col[str[pos]-A];
        t.mult=0;
        pos++;
    }
    return t;
} 
                                                          
int main(){
    matrix total;
    cin>>n;
    char matname; 
    for(int i=0;i<n;i++)
    {
        cin>>matname;
        cin>>row[matname-A]>>col[matname-A];
    }
    getchar();//就因为这个卡了好久 
    while(gets(str)){
        pos=error=0;
        total=expression();
        if(error)
            cout<<"error\n";
        else
            cout<<total.mult<<endl;
    }
    return 0;
} 
bubuko.com,布布扣

zoj 1094 Matrix Chain Multiplication (好递归),布布扣,bubuko.com

zoj 1094 Matrix Chain Multiplication (好递归)

原文:http://www.cnblogs.com/neverchanje/p/3614230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!