题目大意:给出一个矩阵乘法式子,其中每个矩阵的行列已知,求最终的结果。
表达式的运算,关于栈的运用,运算过程中碰到两个不匹配的矩阵时,则矩阵序列错误。
#include<stdio.h> #include<stdlib.h> #include<string.h> int a[60][3]; char b[300]; int c[300][2]; int top=0; int main(void) { int i,n,arow,acol,brow,bcol,OK,count,j,le; scanf("%d",&n); getchar(); for(i=0;i<n;i++) { a[i][0]=getchar(); scanf("%d%d",&a[i][1],&a[i][2]); getchar(); } while(scanf("%s",b)==1) { top=0; count=0; le=strlen(b); if(le==1) { b[0]='\0'; printf("0\n"); } else { OK=1; for(i=0;i<le;i++) { if(b[i]=='(') { ; } else if(b[i]==')') { brow=c[top][0]; bcol=c[top][1]; top--; arow=c[top][0]; acol=c[top][1]; top--; if(acol!=brow) { OK=0; break; } else { count=count+(brow*arow*bcol); top++; c[top][0]=arow; c[top][1]=bcol; } } else { for(j=0;j<n;j++) { if(b[i]==a[j][0]) { top++; c[top][0]=a[j][1]; c[top][1]=a[j][2]; break; } } } } for(j=0;j<le;j++) { b[j]=0; } if(OK==0) { printf("error\n"); } else { printf("%d\n",count); } } } return 0; }
UVA 442-Matrix Chain Multiplication(栈的运用)
原文:http://blog.csdn.net/dilemma729/article/details/45344747