UVA 196 Spreadsheet
2016-07-23 15:31
316 查看
UVA-196
题意:给出一个N*M的矩阵,里面只有整数和公式两种内容。公式要通过它给出来的公式计算出这格的整数值。保证不会存在相互需要调用的情况。解题思路:记忆化搜索。如果进来的格子算过了,直接返回计算后的值。否则的话,是数字就换算出来,然后返回。是公式把字母和数字分别求出来,把对应的内容加进去。
/************************************************************************* > File Name: UVA-196.cpp > Author: Narsh > > Created Time: 2016年07月22日 星期五 14时37分43秒 ************************************************************************/ #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int Max=0x80000000; int val[1100][1100],n,m,t; string w[1100][1100]; int dfs(int x, int y) { if (val[x][y] != Max) return val[x][y]; int k =0,l = w[x][y].length(); if (w[x][y][0] != '=') { for (int i = 0; i < l; i++) k=k*10 + w[x][y][i] - '0'; return k; } int row = 0,column = 0; for (int i = 1; i <= l; i++) if ('A' <= w[x][y][i] && w[x][y][i] <= 'Z') { column= column*26 +w[x][y][i]-'A'+1; }else if ('0' <= w[x][y][i] && w[x][y][i] <='9') { row=row*10+w[x][y][i]-'0'; }else { k += dfs(row,column); row = column =0; } return k; } int main() { scanf("%d",&t); while (t--) { scanf("%d%d",&m,&n); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { cin>>w[i][j]; val[i][j]=Max; } for(int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) val[i][j]=dfs(i,j); for (int i = 1; i <= n; i++) { for (int j = 1; j < m; j++) printf("%d ",val[i][j]); printf("%d\n",val[i][m]); } } }
相关文章推荐
- hibernate.properties
- EJB——消息和消息驱动bean(二)
- tjut 4899
- POJ 2406 Power Strings 数据结构+KMP
- [线性DP]奶牛的锻炼
- PMP学习笔记(1)工作分解结构-资源分解结构-职责分配矩阵-资源日历
- nginx缓冲区优化
- 一、windows 下安装并使用 lua
- poj----2253
- 各大Oj平台介绍
- PHP的spl_autoload_register用法
- Dalvik VM和JVM的比较
- iOS开发之消息推送 —— 远程消息推送入门
- CentOS虚拟机NAT方式无法上网解决方法
- poj----3259
- Input Events(输入事件)
- poj---3660
- 多个TextView 跑马灯效果
- 约瑟夫环问题
- Eclipse Memory Analyzer 使用技巧