ccf 201512-3画图

来源:互联网 发布:创业软件重组情况 编辑:程序博客网 时间:2024/05/29 17:35

画线和填充操作,注意两线相加变+

#include<iostream>using namespace std;char all[101][101];//x,yint m, n, q;int x1, y1, x2, y2;char e;int vis[101][101];void drawline() {    cin >> x1 >> y1 >> x2 >> y2;    if (x1 == x2) {        if (y1 > y2) swap(y1, y2);        for (int i = y1; i <= y2; ++i)            if(all[x1][i]!='-' && all[x1][i]!='+') all[x1][i] = '|';            else all[x1][i]='+';    }    else {        if (x1 > x2) swap(x1, x2);        for (int i = x1; i <= x2; ++i)            if(all[i][y1]!='|'&& all[i][y1]!='+') all[i][y1] = '-';            else all[i][y1]='+';    }}void dfs(int x,int y){    x+=1;    if(!vis[x][y] && all[x][y]!='-' && all[x][y]!='|' && all[x][y]!='+' &&x>=0 && x<m && y>=0 && y<n){all[x][y]=e;vis[x][y]=1;dfs(x,y);}    x-=2;    if(!vis[x][y] && all[x][y]!='-' && all[x][y]!='|' && all[x][y]!='+' &&x>=0 && x<m && y>=0 && y<n){all[x][y]=e;vis[x][y]=1;dfs(x,y);}    x+=1;y+=1;    if(!vis[x][y] && all[x][y]!='-' && all[x][y]!='|' && all[x][y]!='+' &&x>=0 && x<m && y>=0 && y<n){all[x][y]=e;vis[x][y]=1;dfs(x,y);}    y-=2;    if(!vis[x][y] && all[x][y]!='-' && all[x][y]!='|' && all[x][y]!='+' &&x>=0 && x<m && y>=0 && y<n){all[x][y]=e;vis[x][y]=1;dfs(x,y);}}void drawfill(){    cin>>x1>>y1>>e;    for (int i = 0; i < m; ++i) {        for (int j = 0; j < n; ++j)            vis[i][j]=0;    }    vis[x1][y1]=1;    all[x1][y1]=e;    dfs(x1,y1);}int main(){    cin >> m >> n >> q;    for (int i = 0; i < m; ++i) {        for (int j = 0; j < n; ++j)            all[i][j] = '.';    }    while(q--){        cin>>x1;        if(x1) drawfill();        else drawline();    }    for (int j = n - 1; j >= 0; --j) {        for (int i = 0; i < m; ++i)            cout << all[i][j];        cout << endl;    }}
原创粉丝点击