CSP:201512-3 画图(C++)

题目

原题传送门
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目思路

1、形成画布,根据输入长宽初始化画布,将全部像素都初始化为 '.' 
2、输入操作,根据输入的q个操作依次对画布进行修改
	w = 0 :画线段操作,根据输入的x1,y1,x2,y2进行画'|'和'-',通过当前点的状态判断是否更改为'+'
		·y1 == y2  横线
		·x1 == x2  竖线
	w = 1:填充操作,根据输入的x,y,c利用递归方法进行填充
3、画图完成后,按顺序输出画布上的画。

此题需要注意坐标系的表示,明确x轴与y轴;
另外,对于画线段操作何时画'+'的操作判断需要注意,画竖线时只需要判断当前点的状态是否是'+'或’-‘,若是则画'+',对于重复画竖线的地方最后结果应仍然是竖线。

代码实现

#include<bits/stdc++.h>
using namespace std;
int m,n,q,w;
char a[105][105];
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
void dfs(int x,int y,char c)
{
 	a[y][x]=c;
 	for(int i=0;i<4;i++)
 	{
  		int xx=x+dx[i];
  		int yy=y+dy[i];
  		if(a[yy][xx]!='|' && a[yy][xx]!='-' && a[yy][xx]!='+' && a[yy][xx]!=c &&(xx<m&&xx>=0) && (yy>=0&&yy<n))
   			dfs(xx,yy,c);
 	}
 	return;
}
int main()
{
 	scanf("%d %d %d",&m,&n,&q);
 	for(int i=0;i<n;i++)
  		for(int j=0;j<m;j++)
   			a[i][j]='.';
 	for(int i=0;i<q;i++)
 	{
  		scanf("%d",&w);
  		if(w==0)
  		{
   			int x1,y1,x2,y2;
   			scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
   			if(x1==x2)
   			{
    				for(int z=min(y1,y2);z<=max(y1,y2);z++)
    				{
     					if(a[z][x1]=='-' || a[z][x1]=='+')
      						a[z][x1]='+';
     					else 
      						a[z][x1]='|';
    				} 
   			 }
   			else if(y1==y2)
   			{
    					for(int z=min(x1,x2);z<=max(x1,x2);z++)
    					{
     						if(a[y1][z]=='|' || a[y1][z]=='+')
      							a[y1][z]='+';
     						else 
      							a[y1][z]='-';
    					}
   			}
  		}
  		if(w==1)
  		{
   			int x,y;
   			char c;
   			scanf("%d %d %c",&x,&y,&c);
   			dfs(x,y,c); 
  		}
 	} 
 
 	for(int y=n-1;y>=0;y--)
 	{
  		for(int x=0;x<m;x++)
  		{
   			printf("%c",a[y][x]);
  		}
  		printf("\n");
 	}
 	return 0;
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
goc是指“General Obligation Challenge”,是信息学奥赛中的一类问题。这类问题通常要求参赛者针对给定的具体需求,设计和实现一个可以解决问题的程序,并进行性能分析。 在画图CSP-JCSP-SNOIP信息学奥赛中,参赛者将面临一系列关于画图的问题。在这个比赛中,参赛者需要利用编程语言,将给定的需求转化为代码,从而实现图形绘制的功能。参赛者需要了解CSP(Constraint Satisfaction Problem)和JCSP(Java Communicating Sequential Processes)的概念和方法,并运用这些技术来解决问题。 CSP是一种数学模型,用于描述和解决具有约束条件的问题。参赛者需要基于图形的约束条件,设计和实现一个满足这些约束条件的绘图程序。CSP的主要思想是将问题分解为一系列约束条件,并通过查找满足这些约束条件的解决方案来解决问题。 JCSP是一种用于并发编程的Java库。在这个比赛中,参赛者可能需要使用JCSP来实现多个线程之间的通信和同步,以实现并发绘图功能。JCSP还提供了一些高级抽象,如通道和信号量,以帮助参赛者解决问题。 SNOIP是“全国青少年信息学奥林匹克挑战赛”的英文缩写。这个比赛是中国的一项信息学竞赛活动,旨在提高青少年的信息学素养和创新能力。画图CSP-JCSP-SNOIP信息学奥赛是这个比赛中的一个项目,目的是考察参赛者在图形绘制方面的能力和创新思维。 总结来说,画图CSP-JCSP-SNOIP信息学奥赛是一项要求参赛者基于给定需求设计和实现一个满足约束条件的绘图程序的比赛。参赛者需要运用CSP和JCSP的方法来解决问题,并展示出信息学素养和创新能力。这个比赛旨在培养青少年的信息学技能,并促进其创造力和创新精神的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值