uva442 栈
来源:互联网 发布:js获取元素的父节点 编辑:程序博客网 时间:2024/05/22 07:05
题意:给出矩阵规格, 然后给出矩阵算式, 求每个算式的计算量。当矩阵无法相乘时 输出error
思路:1.计算量的计算方式 (A.r, A.c) * (B.r, B.c) 的计算量是 A.r * A.c * B.c()
2.关键: 用栈在储存矩阵。 遇到 '(' 时读掉, 遇到字母时压栈, 遇到')'时计算栈的顶部两个矩阵, 形成行矩阵压入栈中。
3.用数组保存读入的矩阵, 26个英文字母 对于1~26.
算法复杂度:还不会算。。。
代码:
/*堆栈*/#include <stack>#include <cstdio>#include <cstring>using namespace std;struct SMatrix {int row;int col;static int count;};int SMatrix::count = 0;bool error;SMatrix mulMatrix(const SMatrix &, const SMatrix &);int main(){SMatrix matrix[26];memset(matrix, 0, sizeof(matrix));//enterint n;scanf("%d%*c", &n);for (int i = 0; i < n; i++) {char ch;scanf("%c", &ch);scanf("%d%d%*c", &matrix[ch-'A'].row, &matrix[ch-'A'].col);}char ch;stack<SMatrix> staMat;error = false;while (scanf("%c", &ch) != EOF) {if (ch == '\n') {if (error) {printf("error\n");}else {printf("%d\n", SMatrix::count);}SMatrix::count = 0;error = false;}if (ch >= 'A' && ch <= 'Z') {staMat.push(matrix[ch-'A']);}if (ch == ')' && staMat.size() > 1) {SMatrix left, right, rslt;right = staMat.top();staMat.pop();left = staMat.top();staMat.pop();rslt = mulMatrix(left, right);staMat.push(rslt);}}return 0;}SMatrix mulMatrix(const SMatrix &left, const SMatrix &right){if (left.col != right.row) {error = true;return left;}else {SMatrix::count += left.row * left.col * right.col;}SMatrix rslt;rslt.row = left.row;rslt.col = right.col;return rslt;}
- uva442 栈
- UVA442栈
- UVA442
- uva442
- UVA442
- UVa442
- uva442
- uva442
- uva442
- UVa442
- UVa442
- UVa442
- UVa442
- 栈的应用-矩阵链乘uva442
- UVA442 Matrix Chain Multiplication【stack】【栈】
- UVa442 矩阵链乘 栈 stack
- UVa442 Matrix Chain Multiplication(栈)
- UVA442书上解法 对于栈的学习
- 当别人开始说你是疯子的时候,你离成功就不远了
- 补码负数多一个的问题
- NYOJ 42 一笔画问题
- Ubuntu 13.04 安装JDK7
- 浅谈C#中的属性
- uva442 栈
- Unity3D中常用js脚本的C#版
- [第一次训练]Arithmetic Progression
- td中div居中对齐
- Unity3D GUI.VerticalSlider和HorizontalSlider用 javaScript
- 中文编码相关,python处理gbk编码的xml文件方法
- Android 开发中调用google语音接口
- BigDecimal
- Struts2接收参数的几种方式