#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int direct[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
int m,n,q;
string out[1010][1010];
void DFS(int i,int j,string c) //填充字符 深度
{
if(i<0||i>=n||j<0||j>=m//范围以内
||out[i][j]=="-"||out[i][j]=="|"||out[i][j]=="+"//是线段
||out[i][j]==c)//已经填充过
return;//不行就直接返回
out[i][j]=c;//填充
for(int k=0; k<4; ++k) //递归处理4个周边坐标
DFS(i+direct[k][0],j+direct[k][1],c);
}
int main()
{
int X1,Y1,X2,Y2;
cin>>m>>n>>q;
string in[1010];
// string str="\n";
//getline(cin,str);
int key;
for(int i=0; i<n; i++) //¸ß
for(int j=0; j<m; j++)
{
out[i][j]=".";
}
for(int i=0; i<q; i++)
{
cin>>key;
if(key==0)//划线
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
X1=x1;
Y1=n-y1-1;
X2=x2;
Y2=n-y2-1;
if(x1==x2) //竖直
{
if(Y1<Y2)
swap(Y1,Y2);
if(Y1>=Y2)
{
while(Y1>=Y2)
{
/* if(out[Y1][X1-1]=="-"||out[Y1][X1-1]=="-")//两边有-
{
out[Y1][X1]="+";
}
*/ if(out[Y1][X1]=="-")//开始是-
{
out[Y1][X1]="+";
}
/* if(out[Y1-1][X1]=="-")//结束是-
{
out[Y1-1][X1]="+";
}*/
if(out[Y1][X1]!="-"&&out[Y1][X1]!="+")//划线
out[Y1][X1]="|";
Y1--;
}
}
}
if(y1==y2) //水平
{
if(X1<X2)
swap(X1,X2);
if(X1>X2)
{
while(X1>=X2)
{
/* if(out[Y1-1][X1]=="|"||out[Y1+1][X1]=="|")//两边有|
{
out[Y1][X1]="+";
}*/
if(out[Y1][X1]=="|")//开始是|
{
out[Y1][X1]="+";
}
/* if(out[Y1][X1-1]=="|")//结束是|
{
out[Y1][X1-1]="+";
}*/
if(out[Y1][X1]!="|"&&out[Y1][X1]!="+")//划线
out[Y1][X1]="-";
X1--;
}
}
}
}
if(key==1)//填充
{
int x,y;
string c;
cin>>x>>y>>c;
DFS(n-1-y,x,c);
}
}
for(int i=0; i<n; i++) //¸ß{
{
for(int j=0; j<m; j++)
{
cout<<out[i][j];
}
cout<<endl;
}
return 0;
}
小结:一定要认真审题,开始比题目多考虑一些情况,导致一直运行错误,后面把注释部分去掉,删掉一些判断条件就过了