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)!!!!