4 4 5 10 2 1 4 2 3 3 2 4 4 3 1 2 4 3 4 4 4
0 5 0 3 0 2 1 3 0 1
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define maxn 100 + 5
struct Water
{
int x, y, d;
}W[maxn*maxn], flag[maxn];
int time, r, c, n;
int d[maxn][maxn];
int go[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int tt[maxn][maxn];
int main()
{
while(~scanf("%d%d%d%d", &r, &c, &n, &time))
{
memset(d, 0, sizeof(d));
memset(tt, -1, sizeof(tt));
int x, y, num;
queue<Water> Q;
for(int i=1; i<=n; i++)
{
scanf("%d%d%d", &flag[i].x, &flag[i].y, &num);
d[flag[i].x][flag[i].y] = num;
}
scanf("%d%d", &x, &y);
for(int i=0; i<4; i++)
Q.push(Water{x, y, i});
int tmp, ti = 0;
while(time--)
{
ti++;
tmp = Q.size();
if(!tmp)
break;
while(tmp--)
{
Water w = Q.front();
Q.pop();
int xx = w.x + go[w.d][0];
int yy = w.y + go[w.d][1];
if(xx > 0 && xx <= r && yy >=0 && yy <= c)
if(d[xx][yy] == 0)
{
Q.push(Water{xx, yy, w.d});
}
else d[xx][yy]++;
}
for(int i=1; i<=n; i++)
{
x = flag[i].x, y = flag[i].y;
if(tt[x][y] == -1 && d[x][y] > 4)
{
d[x][y] = 0;
tt[x][y] = ti;
for(int i=0; i<4; i++)
Q.push(Water{x, y, i});
}
}
}
for(int i=1; i<=n; i++)
{
x = flag[i].x, y = flag[i].y;
if(tt[x][y] != -1)
printf("0 %d\n", tt[x][y]);
else
printf("1 %d\n", d[x][y]);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/dojintian/article/details/47157089