zoj-1094-Matrix Chain Multiplication
来源:互联网 发布:web portal认证软件 编辑:程序博客网 时间:2024/05/28 19:23
mysol1 直接解析:
#include <iostream>#include <cassert>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;const int maxTableSize = 26 + 1;typedef struct{char identify;int row;int col;}Matrix;#define ERROR -1class MatrixTab{public:MatrixTab():m_size(0){};bool add(char * buf);bool find(char identify, Matrix * matrix);private:int m_size;Matrix m_table[maxTableSize];};bool MatrixTab::add(char * buf){int result;char * addr;sscanf(buf, "%c", &m_table[m_size].identify);buf += 2;m_table[m_size].row = atoi( buf );while( (*buf) != ' ' )buf++;m_table[m_size].col = atoi( buf );m_size++;return true;}bool MatrixTab::find(char identify, Matrix * matrix){assert( m_size > 0 );for(int i=0;i<m_size;i++){if( identify == m_table[i].identify ){*matrix = m_table[i];return true;}}return false;}class Parser{public:Parser(char * buf, MatrixTab & matrixTab):m_matrixTab(matrixTab),m_iLook(0),m_buf(buf){m_len = strlen(buf);};int parse();int expression(Matrix * matrix);private:int m_iLook;int m_len;char * m_buf;MatrixTab & m_matrixTab;};int Parser::expression(Matrix * matrix){if( m_buf[m_iLook] == '(' ){Matrix factor1, factor2;int mults1, mults2;int sum;m_iLook++;mults1 = expression( &factor1 );mults2 = expression( &factor2 );m_iLook++;if( mults1 == ERROR | mults2 == ERROR )return ERROR;else{if( factor1.col == factor2.row ){sum = mults1 + mults2 + factor1.row * factor1.col * factor2.col;matrix->row = factor1.row;matrix->col = factor2.col;return sum;}elsereturn ERROR;}}else{assert( 'A' <= m_buf[m_iLook] && m_buf[m_iLook] <= 'Z' );m_matrixTab.find( m_buf[m_iLook], matrix );m_iLook++;return 0;}}int Parser::parse(){Matrix matirx;return expression(&matirx);}int main(){freopen("input.in", "r", stdin);freopen("output.out", "w", stdout);int N;int i, j;const int bufSize = 100;char buf[100];MatrixTab matrixTab;cin >> N;getchar();for(i=0;i<N;i++){cin.getline(buf, bufSize);matrixTab.add(buf);}while( !cin.eof() ){cin.getline(buf, bufSize);Parser parser( buf, matrixTab );int result = parser.parse();if( result == ERROR ){cout << "error" << endl;}else{cout << result << endl;}}return 0;}
mysol2 压栈:
#include <iostream>#include <cstdio>#include <stack>#include <cstring>using namespace std;typedef struct{int row;int col;}Mat;Mat mats[100];int main(){freopen("input.in", "r", stdin);freopen("output.out", "w", stdout);int N;char c;char buf[100];//保存expressionint iLook;int error;int sum;cin >> N;while( N-- ){cin >> c;cin >> mats[c].row >> mats[c].col;getchar();}while( scanf("%s", buf) != EOF ){getchar();//读一个空格iLook = 0;error = 0;sum = 0;stack <Mat> s;while( iLook < strlen(buf) ){if( buf[iLook] == '(' ){iLook++;}else if( buf[iLook] == ')' ){Mat fac1, fac2;fac2 = s.top();s.pop();fac1 = s.top();s.pop();iLook++;if( fac1.col != fac2.row ){error = 1;break;}else{Mat new_mat;new_mat.row = fac1.row;new_mat.col = fac2.col;s.push( new_mat );sum += fac1.row * fac1.col * fac2.col;}}else{s.push( mats[ buf[iLook] ] );iLook++;}}if( error )cout << "error" << endl;elsecout << sum << endl;}return 0;}
- zoj - 1094 - Matrix Chain Multiplication
- zoj-1094-Matrix Chain Multiplication
- zoj 1094 Matrix Chain Multiplication
- ZOJ 1094 Matrix Chain Multiplication
- ZOJ 1094 Matrix Chain Multiplication
- ZOJ-1094-Matrix Chain Multiplication
- ZOJ-1094,POJ-2246 Matrix Chain Multiplication
- zoj 1094 poj 2246 Matrix Chain Multiplication(堆栈)
- UVa 442 - Matrix Chain Multiplication(zoj 1094)
- POJ 2246/ ZOJ 1094 : Matrix Chain Multiplication - 矩阵相乘,模拟
- ZOJ 1094_Matrix Chain Multiplication
- UVa 442/HDU 1082/ZOJ 1094 Matrix Chain Multiplication(模拟&栈)
- zoj-1094Matrix Chain Multiplication(栈来实现矩阵相乘)
- Matrix Chain Multiplication
- zoj1094 Matrix Chain Multiplication
- Matrix chain multiplication problem
- Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- 使用 activityGroup 模拟Tab
- 常用shell命令-ls,cd,du
- hdu 2955(01 背包)
- Jquery easyui prompt模拟window.prompt使JS暂停
- 最大缝隙
- zoj-1094-Matrix Chain Multiplication
- 【给客户提案6大秘籍】
- Hdu 3530 Subsequence 单调队列
- 由一个浮点数问题引发的致命问题
- HDU_2053 Switch Game
- JQuer版---列表框移动
- 计算机是如何启动的?
- uva 10130 - SuperSale(01背包简单变换)
- int, float, double之间不得不说的故事