CSP201512-03画图 90分

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 #include<algorithm>
 5 #include<stdio.h>
 6 using namespace std;
 7 char a[101][101];
 8 int m,n;//n行m列 
 9 int x1,y1,x2,y2;
10 int type;
11 void init(){//初始化为 . 
12     for(int i=0;i<n;i++){
13         for(int j=0;j<m;j++){
14             a[i][j]='.';
15         }
16     }
17 }
18 bool check(int x,int y,char ch){//判断(x,y)是否可以填充 
19     if(x<0||y<0||x>m-1||y>n-1){//超出边界,不可填充 
20         return false;
21     }
22     if(a[y][x]=='-'||a[y][x]=='|'||a[y][x]=='+'||a[y][x]==ch){
23         return false;
24     }
25     return true;
26 }
27 void fill(int x,int y,char ch){//对于矩阵n*m,从x,y开始用ch来填充  递归填充 
28     a[y][x]=ch;
29     if(check(x-1,y,ch)){
30         fill(x-1,y,ch);
31     }
32     if(check(x+1,y,ch)){
33         fill(x+1,y,ch);
34     }
35     if(check(x,y-1,ch)){
36         fill(x,y-1,ch);
37     }
38     if(check(x,y+1,ch)){
39         fill(x,y+1,ch);
40     }
41 }
42 void draw(){
43     //y2>y1 x2>x1
44     if(y2<y1){
45         int temp=y1;
46         y1=y2;
47         y2=temp;
48     }
49     if(x2<x1){
50         int temp=x1;
51         x1=x2;
52         x2=temp;
53     }
54     if(x1==x2){//同列,画|
55         for(int i=y1;i<=y2;i++){
56             if(a[i][x1]=='-') a[i][x1]='+';
57             else a[i][x1]='|';
58             
59             
60         } 
61     }
62     else{
63         for(int j=x1;j<=x2;j++){
64             if(a[y1][j]=='|') a[y1][j]='+';
65             else a[y1][j]='-';
66         }
67     }
68 }
69 int main(){
70     int q;
71     cin>>m>>n>>q;
72     init(); 
73     while(q--){
74         cin>>type;
75         if(type==1){//填充 
76          int x,y;
77          char ch;
78          cin>>x>>y>>ch;
79          fill(x,y,ch);
80         }
81         else{//画线 
82             cin>>x1>>y1>>x2>>y2;
83             draw(); 
84         }
85     } 
86     for(int i=n-1;i>=0;i--){
87         for(int j=0;j<m;j++){
88             
89             cout<<a[i][j];
90         }
91         cout<<endl;
92     }
93 } 

做了很久但是还是只有九十分,不知道为什么

要特别注意,原始题目是在坐标轴上面进行的 现在用矩阵来存储,坐标轴上面的点(x,y)对应矩阵的坐标应该是(y,x)!!!!

原文地址:https://www.cnblogs.com/Elaine-DWL/p/6568141.html