uva 196 - Spreadsheet
2013-06-23 00:18
363 查看
#include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; struct dot { int x[50], y[50], z, num; } d[1000][1000]; int vis[1000][1000]; int dfs(int x, int y) { if(!d[x][y].z) return d[x][y].num; for(int i = 1; i <= d[x][y].z; i++) d[x][y].num+=dfs(d[x][y].x[i], d[x][y].y[i]); d[x][y].z = 0; return d[x][y].num; } int main() { int t; cin >> t; while(t--) { int n, m; char str[2000]; cin >> n >> m; memset(vis, 0, sizeof(vis)); for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) d[i][j].z = d[i][j].num = 0; for(int i = 1; i <= m; i++) { getchar(); for(int j = 1; j <= n; j++) { cin >> str; int len = strlen(str); if(str[0] != '=') { int num=0, f=0; if(str[0] == '-')f=1; for(int k = f; k < len; k++) num = num*10+str[k]-'0'; if(f) d[i][j].num = -num; else d[i][j].num = num; vis[i][j] = 1; } else { int c = 0, r = 0, pos=1; while(pos<len) { while(isupper(str[pos])) { c=c*26+str[pos]-'A'+1; pos++; } while(isdigit(str[pos])) { r=r*10+str[pos]-'0'; pos++; } if(vis[r][c] || ((i==r) && (j==c)) ) d[i][j].num+=d[r][c].num; else { d[i][j].x[++d[i][j].z]=r; d[i][j].y[d[i][j].z]=c; } c = r = 0; pos++; } } } } for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) if(d[i][j].z) dfs(i, j); for(int i = 1; i <= m; i++) { for(int j = 1; j < n; j++) cout << d[i][j].num << " "; cout << d[i] .num << endl; } } return 0; }
相关文章推荐
- uva 196 Spreadsheet
- UVA - 196 Spreadsheet
- UVA_196_Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 Spreadsheet
- uva 196 Spreadsheet 拓扑排序 。坑爹的一题
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- UVA 196 Spreadsheet
- uva196 Spreadsheet
- UVa 196 Spreadsheet
- UVA 196 Spreadsheet 解题报告
- UVA 196 - Spreadsheet
- uva 196 Spreadsheet(拓扑排序+DFS)
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- uva196 - Spreadsheet(电子表格)
- uva 196 Spreadsheet(电子表格)
- UVa 196 - Spreadsheet
- UVA196-Spreadsheet(拓扑排序)
- uva 196 - Spreadsheet
- Uva - 512 - Spreadsheet Tracking