CCF CSP201512-3画图
思路:把画布转成我们常用的形式,x,y转置,DFS换字符,注意:画线条的时候注意已经相交的情况
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int maxn = 110;
char arr[maxn][maxn];
int m,n;
int xx[4] = {-1,1,0,0};
int yy[4] = {0, 0, -1, 1};
void DFS(int x,int y,char ch){
arr[x][y] = ch;
for(int i = 0; i < 4; i++){
int newx = x+xx[i];
int newy = y+yy[i];
if(newx>=0&&newy>=0&&newx<n&&newy<m&&arr[newx][newy]!='-'&&arr[newx][newy]!='|'&&arr[newx][newy]!=ch&&arr[newx][newy]!='+'){
DFS(newx,newy,ch);
}
}
}
int main(){
int q;
cin>>m>>n>>q;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
arr[i][j]='.';
}
}
for(int i = 0; i < q; i++){
int flag;
cin>>flag;
if(flag == 0){
int x1,x2,y1,y2;
cin>>y2>>x2>>y1>>x1;
if(x1 == x2){
x1 = n-x1-1;x2 = n-x2-1;
if(y1 > y2) swap(y1, y2);
for(int k = y1; k <= y2; k++){
if(arr[x1][k]=='|') arr[x1][k] = '+';
else if(arr[x1][k] == '.')arr[x1][k] = '-';
}
}
else if(y1 == y2){
x1 = n-x1-1;x2 = n-x2-1;
if(x1 > x2) swap(x1, x2);
for(int k = x1; k <= x2; k++){
if(arr[k][y1] == '-') arr[k][y1] = '+';
else if(arr[k][y1] == '.') arr[k][y1] = '|';
}
}
}
else{
int x,y;
char ch;
cin>>y>>x>>ch;
x = n-x-1;
arr[x][y] = ch;
DFS(x,y,ch);
}
}
for(int k = 0; k < n; k++){
for(int j = 0; j < m; j++){
cout<<arr[k][j];
}
cout<<endl;
}
return 0;
}