#include<bits/stdc++.h>
#define N 105
#define ll long long
#define mst(a,b) memset(a,b,sizeof(a))
using namespace std;
char a[N][N];
int m, n;
//坐标系x对应数组的行,y对应数组的列
void fill(int x, int y, char c){
if(x<0 || x>=m || y<0 || y>=n) return; //边界
if(a[y][x]==‘|‘ || a[y][x]==‘-‘ || a[y][x]==‘+‘ || a[y][x]==c) return; //已有字符
a[y][x] = c;
fill(x-1, y, c); //左
fill(x+1, y, c); //右
fill(x, y-1, c); //下
fill(x, y+1, c); //上
}
void line(int x1, int y1, int x2, int y2){
if(x1 == x2){ //竖向 |
for(int j = min(y1, y2); j<=max(y1, y2); j++){
if(a[j][x1]==‘-‘ || a[j][x1]==‘+‘){ //已经有-或者已经是+
a[j][x1] = ‘+‘;
}
else a[j][x1] = ‘|‘;
} //for
} //if
else{ //横向--
for(int j = min(x1,x2); j<=max(x1, x2); j++){
if(a[y1][j] == ‘|‘ || a[y1][j] == ‘+‘){
a[y1][j] = ‘+‘;
}
else a[y1][j] = ‘-‘;
} //for
} //else
} //void
int main(){
int ans;
int qflg, x, y, x1, x2, y1, y2;
char c;
mst(a, ‘.‘);
int q;
cin >> m >> n>> q;
for(int i=0; i<q; i++){
cin >> qflg;
if(qflg){ //1:填充
cin >> x >> y >> c;
fill(x, y, c);
}
else{ //0:画线
cin >> x1 >> y1 >> x2 >> y2;
line(x1, y1, x2, y2);
}
}
// 输出
for(int i=n-1; i>=0; i--){ //数组的列0~n是从上到下,坐标y的0~n是从下到上
for(int j=0; j<m; j++){
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}
原文:https://www.cnblogs.com/monster-yher/p/13193623.html