1. 程式人生 > >ccf 201512-3 畫圖

ccf 201512-3 畫圖

畫線和填充操作,注意兩線相加變+

#include<iostream>
using namespace std;
char all[101][101];//x,y
int 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; } }