注意:
注意输入和输出,即数组坐标系和普通坐标系的区别
#include<iostream>
using namespace std;
#include<string>
#include<cstring>
char GG[105][105];
int n,m;
int cnt;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int vis[105][105]; //dfs
int in(int x,int y) //是否越界
{
if(x>=0 && x<m && y>=0 && y<n)
return 1;
return 0;
}
void dfs(int x,int y,char tt)
{
GG[x][y]=tt;
vis[x][y]=1;
int nextx,nexty;
for(int i=0;i<4;i++)
{
nextx=x+dir[i][0];
nexty=y+dir[i][1];
if(!vis[nextx][nexty] && in(nextx,nexty)==1 && GG[nextx][nexty]!='-' && GG[nextx][nexty]!='|' && GG[nextx][nexty]!='+' )
{
dfs(nextx,nexty,tt);
}
}
}
void draw_z(int x1,int y1,int x2,int y2)
{
int minn,maxx;
if(x1==x2)
{
minn=min(y1,y2);
maxx=max(y1,y2);
for(int y=minn;y<=maxx;y++)
{
if(GG[x1][y]=='-' || GG[x1][y]=='+') //注意要考虑全名,第二个条件不要忽视
{
GG[x1][y]='+';
}else GG[x1][y]='|';
}
}else{
minn=min(x1,x2);
maxx=max(x1,x2);
for(int x=minn;x<=maxx;x++)
{
if(GG[x][y1]=='|' || GG[x][y1]=='+')
{
GG[x][y1]='+';
}else{
GG[x][y1]='-';
}
}
}
}
int main()
{
cin>>m>>n;
cin>>cnt;
int x1,y1,x2,y2;
int op;
int x,y;
char c;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
GG[i][j]='.';
}
while(cnt--)
{
memset(vis,0,sizeof(vis));
scanf("%d",&op);
if(op==0)
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
draw_z(x1,y1,x2,y2);
}else{
scanf("%d %d %c",&x,&y,&c);
dfs(x,y,c);
}
}
for(int j=n-1;j>=0;j--)
{
for(int i=0;i<m;i++)
{
printf("%c",GG[i][j]);
}
printf("\n");
}
return 0;
}