http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110105&format=html
UVA 10267 Graphical Editor(图形化编辑器)
题目大意:
根据指令进行操作:
I M N 创建一个新的M*N图像,所有像素为白色(O)
C 清楚图像,把所有像素涂成白色(O),图像大小不变
L X Y C 把像素(X,Y)涂成颜色(C)
V X Y1 Y2 C 画一条竖直线段,颜色为(C),列号为X,从第Y1行到第Y2行(包括Y1和Y2行)
H X1 X2 Y C 画一条水平线段,颜色为(C),行号为Y,从第X1列到地X2列(包括X1和X2列)
K X1 Y1 X2 Y2 C 画一个实心矩形,颜色为(C),左上角为(X1,Y1),右下角为(X2,Y2)
F X Y C 把区域R填充为颜色(C)。R的定义为:若像素(X,Y)属于R,则所有与(X,Y)公共边且颜色相同的像素也属于R
S NAME 原样输出文件名以及整幅图像的像素矩阵
X 退出程序
输入,参见样例
note:如果指令的第一个字符不是I、C、L、V、H、K、F、S、X之一,忽略此指令,直接跳到下一行
样例输入:
I 5 6 L 2 3 A S one.bmp G 2 3 J F 3 3 J V 2 3 4 W H 3 4 2 Z S two.bmp X
样例输出:
one.bmp OOOOO OOOOO OAOOO OOOOO OOOOO OOOOO two.bmp JJJJJ JJZZJ JWJJJ JWJJJ JJJJJ JJJJJ
此题让我纠结了好长时间,主要原因我觉得还是在输入输出上的问题,跟队友交了n次都没过,郁闷至极啊,不过最终还是解决了,贴一下队友的代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char bmp[255][255];
char name[255];
int row,col,b[4][2]={-1,0,1,0,0,-1,0,1};
int fill_field(int x,int y,char cur,char rec)//填充R区域
{
int i,s,t;
if(bmp[x][y]==cur) return 0;
bmp[x][y]=cur;
for(i=0;i<4;i++)
{
s=b[i][0]+x;
t=b[i][1]+y;
if(s>0 && s<=row && t>0 && t<=col && bmp[s][t]==rec)
fill_field(s,t,cur,rec);
}
return 0;
}
int fill_bmp(int u,int d,int l,int r,char c) //填充指定区域
{
int i,j;
for(i=u;i<=d;i++)
for(j=l;j<=r;j++) bmp[i][j]=c;
return 0;
}
int main()
{
int i,j,x1,y1,x2,y2,x,y,temp;
char type,c;
while(1)
{
cin>>type;
if(type=='X') break; //退出程序
switch(type)
{
case 'I': //创建一个新的M*N图像,所有像素为白色(O)
cin>>col>>row;
fill_bmp(1,row,1,col,'O');
break;
case 'C': //清楚图像,把所有像素涂成白色(O),图像大小不变
fill_bmp(1,row,1,col,'O');
break;
case 'L': // 把像素(X,Y)涂成颜色(C)
cin>>y>>x>>c;
fill_bmp(x,x,y,y,c);
break;
case 'V': //画一条竖直线段,颜色为(C),列号为X,从第Y1行到第Y2行(包括Y1和Y2行)
cin>>y1>>x1>>x2>>c;
if(x1>x2) temp=x1,x1=x2,x2=temp;
fill_bmp(x1,x2,y1,y1,c);
break;
case 'H': //画一条水平线段,颜色为(C),行号为Y,从第X1列到地X2列(包括X1和X2列)
cin>>y1>>y2>>x1>>c;
if(y1>y2) temp=y1,y1=y2,y2=temp;
fill_bmp(x1,x1,y1,y2,c);
break;
case 'K': //画一个实心矩形,颜色为(C),左上角为(X1,Y1),右下角为(X2,Y2)
cin>>y1>>x1>>y2>>x2>>c;
fill_bmp(x1,x2,y1,y2,c);
break;
case 'F': //把区域R填充为颜色(C)。R的定义为:若像素(X,Y)属于R,则所有与(X,Y)公共边且颜色相同的像素也属于R
cin>>y>>x>>c;
fill_field(x,y,c,bmp[x][y]);
break;
case 'S': //原样输出文件名以及整幅图像的像素矩阵
cin>>name;
cout<<name<<endl;
for(i=1;i<=row;i++)
{
for(j=1;j<=col;j++) cout<<bmp[i][j];
cout<<endl;
}
break;
default: //处理非指令信息
while(getchar()!='\n');
break;
}
}
return 0;
}