您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: