UVA - 442 Matrix Chain Multiplication
2014-09-27 12:48
405 查看
题目大意:给出一系列矩阵,然后再给一系列表达式,求一个有几个元素相乘
解题思路:用栈来存储,遇到右括号就弹出两个,然后把结果相加,再压入变换后的矩阵
解题思路:用栈来存储,遇到右括号就弹出两个,然后把结果相加,再压入变换后的矩阵
#include<cstdio> #include<cstring> #include<stack> using namespace std; struct Matrix { int r; int c; char name; }; Matrix m[100]; int main() { int test; char str[100]; scanf("%d", &test); getchar(); for(int i = 0; i < test; i++) { scanf("%c", &(m[i].name)); scanf("%d", &(m[i].r)); scanf("%d", &(m[i].c)); getchar(); } /* for(int i = 0 ; i < test; i++) { printf("%c %d %d\n",m[i].name, m[i].r, m[i].c); } */ while(gets(str)) { int len = strlen(str); Matrix left , right, temp; int number = 0, mark = 0;; stack<Matrix> s; if(len == 1) { printf("0\n"); continue; } else { for(int i = 0; i < len; i++) { if(str[i] >= 'A' && str[i] <= 'Z')//提取字母,将相应的压入栈 for(int j = 0; j < test; j++) if(str[i] == m[j].name) { s.push(m[j]); break; } if(str[i] == ')') { right = s.top(); s.pop(); left = s.top(); s.pop(); temp.r = left.r; temp.c = right.c; if(left.c == right.r) number = number + left.r * left.c * right.c ; else { mark++; break; } s.push(temp); } } if(mark == 1) printf("error\n"); else printf("%d\n",number); } } return 0; }
相关文章推荐
- uva 442 Matrix Chain Multiplication
- Matrix Chain Multiplication, UVa442
- UVa - 442 - Matrix Chain Multiplication(用栈实现简单的表达式解析)
- UVa 442 - Matrix Chain Multiplication
- UVa 442 - Matrix Chain Multiplication
- Matrix Chain Multiplication UVA - 442
- UVA 442 Matrix Chain Multiplication
- POJ2246 HDU1082 ZOJ1094 UVA442 Matrix Chain Multiplication(矩阵相乘)
- UVA_442: Matrix Chain Multiplication
- UVA-442 Matrix Chain Multiplication
- UVa 442 - Matrix Chain Multiplication
- Uva 442 Matrix Chain Multiplication 栈
- UVA - 442 Matrix Chain Multiplication
- UVa 442 Matrix Chain Multiplication
- 【例题 6-3 UVA - 442】Matrix Chain Multiplication
- UVa 442 Matrix Chain Multiplication(栈)
- uva442 Matrix Chain Multiplication
- UVA 442 Matrix Chain Multiplication
- UVA - 442 Matrix Chain Multiplication
- uva 442 - Matrix Chain Multiplication