/*连续两道题目的数据有问题,Ora。
刚开死将这道题想简单了,直接模拟
做的,额...*/
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<cstdlib>
using namespace std;
const int maxn = 1001;
const int Min = -100000000;
int map[maxn][maxn];
string s;
string str[maxn][maxn];
int n,m;
int dfs(int x,int y)
{
if(map[x][y] != Min) return map[x][y];
map[x][y] = 0;
int len = str[x][y].size();
int dx = 0;
int dy = 0;
for(int i = 0; i < len; i++)
{
if(isalpha(str[x][y][i]))
{
dy = dy * 26 + str[x][y][i] - 'A' + 1;
}
else if(str[x][y][i] >= '0' && str[x][y][i] <= '9')
{
dx = dx * 10 + str[x][y][i] - '0';
}
if(str[x][y][i] == '+' || i == len - 1)
{
map[x][y] += dfs(dx,dy);
dx = 0;
dy = 0;
}
}
return map[x][y];
}
int main()
{
int T = 0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
memset(map,0,sizeof(map));
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
cin>>s;
int len = s.size();
if(s[0] == '=')
{
str[i][j] = s;
map[i][j] =Min;
}
else
{
map[i][j] = atoi(s.c_str());
}
}
}
for(int i = 1; i <= n; i++)
{
for( int j = 1; j <= m; j++)
{
if(map[i][j] == Min) map[i][j] = dfs(i,j);
}
}
for(int i = 1; i <= n; i++)
{
printf("%d",map[i][1]);
for(int j = 2; j <= m; j++)
{
printf(" %d",map[i][j]);
}
printf("\n");
}
}
return 0;
}
196 - Spreadsheet//dfs
最新推荐文章于 2024-07-23 11:56:21 发布