#include<iostream> #include<queue> #include<string> #include<cstring> using namespace std; #define maxn 110 char a[maxn][maxn]; bool vis[maxn][maxn]; int m,n,q; int dx[]={0,0,-1,1}; int dy[]={1,-1,0,0}; struct node{ int x,y; }; void fillchar(int x,int y,char ch){ memset(vis,false,sizeof(vis)); queue<node> q; q.push({x,y}); vis[x][y]=true; a[x][y]=ch; while(!q.empty()){ node curt=q.front();q.pop(); for(int i=0;i<4;i++){ node temp; temp.x=curt.x+dx[i]; temp.y=curt.y+dy[i]; if(temp.x>=0 && temp.y>=0 && temp.x<m && temp.y<n && !vis[temp.x][temp.y] && a[temp.x][temp.y]!=‘|‘ && a[temp.x][temp.y]!=‘-‘ && a[temp.x][temp.y]!=‘+‘){ vis[temp.x][temp.y]=true; a[temp.x][temp.y]=ch; q.push(temp); } } } } void drawline(int x1,int y1,int x2,int y2){ if(x1==x2){ if(y1>y2){ swap(y1,y2); } for (int i=y1; i<=y2; i++){ if(a[x1][i]==‘-‘ || a[x1][i]==‘+‘) a[x1][i]=‘+‘; else a[x1][i]=‘|‘; } }else { if(x1>x2){ swap(x1,x2); } for (int i=x1; i<=x2; i++){ if(a[i][y1]==‘|‘ || a[i][y1]==‘+‘) a[i][y1]=‘+‘; else a[i][y1]=‘-‘; } } } int main(){ cin>>m>>n>>q; memset(a,‘.‘,sizeof(a)); memset(vis,false,sizeof(vis)); for(int i=0;i<q;i++){ int temp; cin>>temp; if(temp==0){ int a,b,c,d; cin>>a>>b>>c>>d; drawline(a,b,c,d); }else{ int a,b; char ch; cin>>a>>b>>ch; fillchar(a,b,ch); } } for(int i=n-1;i>=0;i--){ for(int j=0;j<m;j++){ cout<<a[j][i]; } cout<<endl; } return 0; }
原文:https://www.cnblogs.com/Xu-SDU/p/13058289.html