题目链接:http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1018 
这题算是简单的模拟了,只要跟着题目意思做就行了,要想一下的就是那个F的功能,它要填充颜色,其实就是当它向周围寻找时,找到与原本颜色不同或是和要涂的的颜色相同的就返回,简单递归可以实现。。。下面是我的代码:

code:
#include"stdio.h"
char a[251][251];
void I(int m,int n)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]='O';
}
void C(int m,int n)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]='O';
}
void L(int x,int y,char c)
{
a[y][x]=c;
}
void V(int x,int y1,int y2,char c)
{
int t,i;
if(y1>y2)
{
t=y1;
y1=y2;
y2=t;
}
for(i=y1;i<=y2;i++)
a[i][x]=c;
}
void H(int x1,int x2,int y,char c)
{
int i,t;
if(x1>x2)
{
t=x1;
x1=x2;
x2=t;
}
for(i=x1;i<=x2;i++)
a[y][i]=c;
}
void K(int x1,int x2,int y1,int y2,char c)
{
int t,i,j;
if(y1>y2)
{
t=y1;
y1=y2;
y2=t;
}
if(x1>x2)
{
t=x1;
x1=x2;
x2=t;
}
for(i=x1;i<=x2;i++)
for(j=y1;j<=y2;j++)
a[j][i]=c;
}
void F(int x,int y,char c,char c1)
{
if(a[y][x]==c||a[y][x]!=c1)
return;
a[y][x]=c;
F(x-1,y,c,c1);
F(x+1,y,c,c1);
F(x,y-1,c,c1);
F(x,y+1,c,c1);
}
void S(int m,int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
int main()
{
int x1,x2,y1,y2,m,n;
char c,d,name[1000];
while(scanf("%c",&c)!=EOF)
{
switch(c)
{
case 'I':scanf("%d%d",&m,&n);I(m,n);break;
case 'C':C(m,n);break;
case 'L':scanf("%d%d%*c%c",&x1,&y1,&d);L(x1,y1,d);break;
case 'V':scanf("%d%d%d%*c%c",&x1,&y1,&y2,&d);V(x1,y1,y2,d);break;
case 'H':scanf("%d%d%d%*c%c",&x1,&x2,&y1,&d);H(x1,x2,y1,d);break;
case 'K':scanf("%d%d%d%d%*c%c",&x1,&x2,&y1,&y2,&d);K(x1,x2,y1,y2,d);break;
case 'F':scanf("%d%d%*c%c",&x1,&y1,&d);F(x1,y1,d,a[y1][x1]);break;
case 'S':scanf("%s",name);puts(name);S(m,n);break;
case 'X':return 0;
}
}
return 0;
} 
菜鸟之作,仅供参考,如有错误,请您指出——Tamara

发表评论

电子邮件地址不会被公开。

Post Navigation