http://acm.hdu.edu.cn/showproblem.php?pid=4527
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int NM=10;
struct Node{
int x,y,dir;
};
int c[4][2]={-1,0,1,0,0,-1,0,1};
int a[NM][NM],mafx[NM],mafy[NM],n,m;
queue<Node>q[2];
void BFS(int x,int y)
{
Node t,p;
int i,j,kk,h;
for(i=0;i<4;i++)
{
t.x=x,t.y=y,t.dir=i;
q[0].push(t);
}
kk=0;
while(1)
{
while(!q[kk&1].empty())
{
t=q[kk&1].front();q[kk&1].pop();
p.x=t.x+c[t.dir][0],p.y=t.y+c[t.dir][1],p.dir=t.dir;
if(p.x>0&&p.x<=6&&p.y>0&&p.y<=6)
{
if(a[p.x][p.y]==0)
q[(kk+1)&1].push(p);
else
a[p.x][p.y]++;
}
}
for(i=1;i<=6;i++)
for(j=1;j<=6;j++)
if(a[i][j]>4)
{
a[i][j]=0;
for(h=0;h<4;h++)
{
t.x=i,t.y=j,t.dir=h;
q[(kk+1)&1].push(t);
}
}
if(q[(kk+1)&1].empty()) break;
kk++;
}
}
int main()
{
int t1,t2,i,j;
while(scanf("%d",&a[1][1])!=EOF)
{
for(i=2;i<=6;i++)
scanf("%d",&a[1][i]);
for(i=2;i<=6;i++)
for(j=1;j<=6;j++)
scanf("%d",&a[i][j]);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&t1,&t2);
a[t1][t2]++;
if(a[t1][t2]>4)
{a[t1][t2]=0;BFS(t1,t2);}
}
for(i=1;i<=6;i++)
{
printf("%d",a[i][1]);
for(j=2;j<=6;j++)
printf(" %d",a[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}
不限格数:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int NM=10;
struct Node{
int x,y,time;
};
int c[4][2]={-1,0,1,0,0,-1,0,1};
int a[NM][NM],mafx[NM],mafy[NM],n,m;
void BFS(int x,int y)
{
queue<Node>q1;
Node t,p;
int i,j,tx,ty,flag,Time;
//Time=0;
t.x=x,t.y=y;
q1.push(t);
flag=1;
while(1) //相同时间的处理
{
if(q1.empty())
{
for(i=1;i<=6;i++)
for(j=1;j<=6;j++)
{
if(a[i][j]>4)
{
p.x=i,p.y=j;
flag=1;
a[i][j]=0;
q1.push(p);
}
}
if(!flag) break;
}
t=q1.front();
q1.pop();
for(i=0;i<4;i++)
{
tx=t.x+c[i][0],ty=t.y+c[i][1];
while(tx>0&&tx<=6&&ty>0&&ty<=6)
{
if(a[tx][ty]>0)
{
a[tx][ty]++;
break;
}
tx+=c[i][0],ty+=c[i][1];
}
}
flag=0;
}
}
int main()
{
int t1,t2,i,j;
while(scanf("%d",&a[1][1])!=EOF)
{
for(i=2;i<=6;i++)
scanf("%d",&a[1][i]);
for(i=2;i<=6;i++)
{
for(j=1;j<=6;j++)
scanf("%d",&a[i][j]);
}
scanf("%d",&m);
for(i=1;i<=m;i++)
scanf("%d%d",&mafx[i],&mafy[i]);
for(i=1;i<=m;i++)
{
t1=mafx[i],t2=mafy[i];
a[t1][t2]++;
if(a[t1][t2]>4)
{
a[t1][t2]=0;
BFS(t1,t2);
}
}
for(i=1;i<=6;i++)
{
printf("%d",a[i][1]);
for(j=2;j<=6;j++)
printf(" %d",a[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}