CCF 201512-3 画图(C++)

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int direct[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
int m,n,q;
string out[1010][1010];
void DFS(int i,int j,string c) //填充字符 深度
{
    if(i<0||i>=n||j<0||j>=m//范围以内
            ||out[i][j]=="-"||out[i][j]=="|"||out[i][j]=="+"//是线段
            ||out[i][j]==c)//已经填充过
        return;//不行就直接返回
    out[i][j]=c;//填充
    for(int k=0; k<4; ++k) //递归处理4个周边坐标
        DFS(i+direct[k][0],j+direct[k][1],c);
}
int main()
{
    int X1,Y1,X2,Y2;
    cin>>m>>n>>q;
    string in[1010];
    // string str="\n";
    //getline(cin,str);
    int key;

    for(int i=0; i<n; i++) //¸ß
        for(int j=0; j<m; j++)
        {
            out[i][j]=".";
        }
    for(int i=0; i<q; i++)
    {
        cin>>key;
        if(key==0)//划线
        {
            int x1,y1,x2,y2;
            cin>>x1>>y1>>x2>>y2;
            X1=x1;
            Y1=n-y1-1;
            X2=x2;
            Y2=n-y2-1;
            if(x1==x2) //竖直
            {
                if(Y1<Y2)
                    swap(Y1,Y2);
                if(Y1>=Y2)
                {
                    while(Y1>=Y2)
                    {
                     /*   if(out[Y1][X1-1]=="-"||out[Y1][X1-1]=="-")//两边有-
                        {
                            out[Y1][X1]="+";
                        }
                       */ if(out[Y1][X1]=="-")//开始是-
                        {
                            out[Y1][X1]="+";
                        }
                       /* if(out[Y1-1][X1]=="-")//结束是-
                        {
                            out[Y1-1][X1]="+";

                        }*/
                        if(out[Y1][X1]!="-"&&out[Y1][X1]!="+")//划线
                            out[Y1][X1]="|";
                        Y1--;
                    }
                }
            }
            if(y1==y2) //水平
            {
                if(X1<X2)
                    swap(X1,X2);
                if(X1>X2)
                {
                    while(X1>=X2)
                    {
                       /* if(out[Y1-1][X1]=="|"||out[Y1+1][X1]=="|")//两边有|
                        {
                            out[Y1][X1]="+";
                        }*/
                        if(out[Y1][X1]=="|")//开始是|
                        {
                            out[Y1][X1]="+";
                        }
                       /* if(out[Y1][X1-1]=="|")//结束是|
                        {
                            out[Y1][X1-1]="+";
                        }*/
                        if(out[Y1][X1]!="|"&&out[Y1][X1]!="+")//划线
                            out[Y1][X1]="-";
                        X1--;
                    }
                }
            }
        }
        if(key==1)//填充
        {
            int x,y;
            string c;
            cin>>x>>y>>c;
            DFS(n-1-y,x,c);
        }
    }
    for(int i=0; i<n; i++)  //¸ß{
    {
        for(int j=0; j<m; j++)
        {
            cout<<out[i][j];
        }
        cout<<endl;
    }
    return 0;
}

小结:一定要认真审题,开始比题目多考虑一些情况,导致一直运行错误,后面把注释部分去掉,删掉一些判断条件就过了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值