UVA10267 Graphical Editor 简单模拟

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>

using namespace std;

#define MAXN 300

char map[MAXN][MAXN];
char task[MAXN],name[MAXN];
bool vis[MAXN][MAXN];
int n,m;
void init(int x,int y)
{
	n=x;
	m=y;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			map[i][j]='O';
}

void clear()
{
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			map[i][j]='O';
}

void print()
{
  scanf("%s",name);
	printf("%s\n",name);
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n+1;j++)
			j==n+1?printf("\n"):printf("%c",map[i][j]);
}

void color(int x,int y,char c)
{
  map[y][x]=c;
}

void line1(int x,int y1,int y2,char c)
{
  if(y1>y2) swap(y1,y2);
  for(int i=y1;i<=y2;i++)
    map[i][x]=c;
}

void line2(int x1,int x2,int y,char c)
{
  if(x1>x2) swap(x1,x2);
  for(int i=x1;i<=x2;i++)
    map[y][i]=c;
}

void drawrec(int x1,int y1,int x2,int y2,char c)
{
  if(x1>x2) swap(x1,x2);
  if(y1>y2) swap(y1,y2);
  for(int i=y1;i<=y2;i++)
    for(int j=x1;j<=x2;j++)
      map[i][j]=c;
}

void dfs(int x,int y,char c)
{
  if(vis[y][x]||x<1||y<1||x>n||y>m) return; 
  vis[y][x]=1;
  if(map[y][x+1]==map[y][x]) dfs(x+1,y,c);
  if(map[y+1][x]==map[y][x]) dfs(x,y+1,c);
  if(map[y-1][x]==map[y][x]) dfs(x,y-1,c);
  if(map[y][x-1]==map[y][x]) dfs(x-1,y,c);
  map[y][x]=c;
}


void solve()
{
  int a,b,c,d;
  char tmp[50];
  do
  {
    if(task[0]=='I')
    {
      scanf("%d%d",&a,&b);
      init(a,b);
    }
    else
    if(task[0]=='C') clear();
    else
    if(task[0]=='L')
    {
      scanf("%d%d%s",&a,&b,tmp);
      color(a,b,tmp[0]); 
    }
    else
    if(task[0]=='V')
    {
      scanf("%d%d%d%s",&a,&b,&c,tmp);
      line1(a,b,c,tmp[0]);
    }
    else
    if(task[0]=='H')
    {
      scanf("%d%d%d%s",&a,&b,&c,tmp);
      line2(a,b,c,tmp[0]);
    }
    else
    if(task[0]=='K')
    {
      scanf("%d%d%d%d%s",&a,&b,&c,&d,tmp);
      drawrec(a,b,c,d,tmp[0]);
    }
    else
    if(task[0]=='F')
    {
      scanf("%d%d%s",&a,&b,tmp);
      memset(vis,0,sizeof(vis));
      dfs(a,b,tmp[0]);
    }
    else
    {
     gets(task);
    }
  }while(~scanf("%s",&task)&& task[0]!='X' && task[0]!='S');
  if(task[0]=='S')
    print();
}

int main()
{
	while(~scanf("%s",task) && task[0]!='X')
		solve();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值