#include <cstdlib>
#include <iostream>
using namespace std;
int a[100][100][100];
int b[100];
int bx[100], by[100];
int W, H, T;
int main(int argc, char *argv[])
{
int n;
int t, x1, y1, x2, y2;
int k = 1;
while(cin>>W>>H>>T, T)
{
cout<<"Robbery #"<<k++<<":"<<endl;
cin>>n;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for (int i = 0; i < n; i++)
{
cin>>t>>x1>>y1>>x2>>y2;
for (int x=x1-1; x<x2; x++)
for (int y = y1-1; y<y2; y++)
a[t-1][x][y] = 1;
}
for (int t = 1; t < T; t++)
for (int x = 0; x < W; x++)
for (int y=0; y < H; y++)
if ( (x==0 || a[t-1][x-1][y])
&& (y==0 || a[t-1][x][y-1])
&& (a[t-1][x][y])
&& (x == W-1 || a[t-1][x+1][y])
&& (y == H-1 || a[t-1][x][y+1]) )
a[t][x][y] = 1;
bool escaped = false;
for (int x = 0; x < W; x++)
for (int y=0; y < H; y++)
if (a[T-1][x][y]==0)
{
b[T-1]++; bx[T-1] = x; by[T-1] = y;
}
if (b[T-1] == 0)escaped= true;
for (int t = T-2; t > -1; t--)
{
for (int x = 0; x < W; x++)
for (int y=0; y < H; y++)
{
if ( (x==0 || a[t+1][x-1][y])
&& (y==0 || a[t+1][x][y-1])
&& (a[t+1][x][y])
&& (x == W-1 || a[t+1][x+1][y])
&& (y == H-1 || a[t+1][x][y+1]) )
a[t][x][y] = 1;
if (a[t][x][y]==0) { b[t]++; bx[t] = x; by[t] = y; }
}
if (b[t]==0) { escaped=true; break; }
}
if (escaped) cout<<"The robber has escaped."<<endl;
else
{
int cnt = 0;
for (int t = 0; t < T; t++)
if (b[t]==1)
{
cnt++;
cout<<"Time step "<<t+1<<": The robber has been at "
<<bx[t]+1<<","<<by[t]+1<<"."<<endl;
}
if (cnt == 0) cout<<"Nothing known."<<endl;
}
cout<<endl;
}
}
zoj 1144 Robbery
最新推荐文章于 2019-01-19 11:29:02 发布