“生化武器”

Description

在一个封闭的房间里,gogo给大家表演了他的屁遁术,人果然一下没影了,但是他留下的“生化武器”,却以每秒1米的速度向上下左右扩散出去。为了知道自己会不会被“毒”到,你果断写了个算法计算出了“毒气”在t秒时间内可以到达的所有地方。

Input

有多组测试数据

第一行输入n,m,t(0<n,m<=30)

n和m表示图的行和列,t表示时间 ,‘*’为表演的地点,‘X’是墙,‘.’为空白的地方

Output

如果在t秒时间内毒气没有充满房间或刚好充满,输出现在房间里的情况,‘#’表示有‘毒气’的地方

否则,输出“No”

每组数据输出后有一个空行

Sample Input

9 9 4
XXXXXXXXX
X...X...X
X.*.....X
X...X...X
XXXXXXXXX
X...X
X...X
X...X
XXXXX

5 5 2
XXXXX
X...X
X.*.X
X...X
XXXXX

Sample Output

XXXXXXXXX
X###X#..X
X######.X
X###X#..X
XXXXXXXXX
X...X
X...X
X...X
XXXXX

XXXXX
X###X
X###X
X###X
XXXXX






自己的答案

#include<stdio.h>
int a[4][2]={1,0,-1,0,0,1,0,-1},u[30][30];
char b[30][30];
int m,n,t;
void print()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;b[i][j]!='\0';j++)
printf("%c",b[i][j]);
printf("\n");
}
printf("\n");
}
int sort(int x,int y,int k)
{
int i;
for(i=0;i<4;i++)
if(b[x+a[i][0]][y+a[i][1]]=='.'&&u[x+a[i][0]][y+a[i][1]]==0)
{
u[x+a[i][0]][y+a[i][1]]=1;
k++;
k=sort(x+a[i][0],y+a[i][1],k);
}
return k;
}
void main()
{
int i,j,p,l,g,h;
while(scanf("%d %d %d",&n,&m,&t)!=EOF)
{
int d=0;
int k=0;
int x,y;
int c[2][30][2]={0};
for(i=0;i<n;i++)
{
scanf("%s",b[i]);
for(j=0;b[i][j]!='\0';j++)
{
if(b[i][j]=='*')c[0][0][0]=i,x=i,y=j,c[0][0][1]=j,b[i][j]='#';
u[i][j]=0;
}
}
k=sort(x,y,k);
p=1,g=0;
if(t==0)print();
else if(t>0&&k==0)printf("No\n\n");
else
{
for(i=1;i<=t;i++)
{
h=0;
for(l=0;l<p;l++)
{
for(j=0;j<4;j++)
{
if(b[c[d][l][0]+a[j][0]][c[d][l][1]+a[j][1]]=='.')
{
b[c[d][l][0]+a[j][0]][c[d][l][1]+a[j][1]]='#';
c[1-d][h][0]=c[d][l][0]+a[j][0],c[1-d][h][1]=c[d][l][1]+a[j][1];
h++;
g++;
}
}
}
d=1-d;
p=h;
if(i==t&&g<=k)
{
print();
break;
}
else if(i<t&&g>=k)
{
printf("No\n\n");
break;
}
}
}
}
}

posted @ 2013-06-23 16:15  失眠的娃儿  阅读(234)  评论(0编辑  收藏  举报