csp20151203画图 解题报告和易错地方
Solution:
dfs
对于dfs:
//遇到map[u][v]==c,则不用再搜
//因为通过(u,v)到达的其它点(p,q),
//之前从(u,v)开始肯定能到达(p,q),(p,q)已经被填充了
注意:
if (map[x1][i]=='-' || map[x1][i]=='+')
map[x1][i]='+';
else
map[x1][i]='|';
不要写成了
if (map[x1][i]=='-')
map[x1][i]='+';
else
map[x1][i]='|';
如果原来是‘+’,加了一竖仍是’|'
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define maxm 102 4 #define maxn 102 5 6 char map[maxm][maxn],c; 7 long m,n; 8 9 void dfs(long x,long y) 10 { 11 //遇到map[u][v]==c,则不用再搜 12 //因为通过(u,v)到达的其它点(p,q), 13 //之前从(u,v)开始肯定能到达(p,q),(p,q)已经被填充了 14 map[x][y]=c; 15 if (x!=0 && map[x-1][y]!=c && map[x-1][y]!='|' 16 && map[x-1][y]!='-' && map[x-1][y]!='+') 17 dfs(x-1,y); 18 19 if (x!=m-1 && map[x+1][y]!=c && map[x+1][y]!='|' 20 && map[x+1][y]!='-' && map[x+1][y]!='+') 21 dfs(x+1,y); 22 23 if (y!=0 && map[x][y-1]!=c && map[x][y-1]!='|' 24 && map[x][y-1]!='-' && map[x][y-1]!='+') 25 dfs(x,y-1); 26 27 if (y!=n-1 && map[x][y+1]!=c && map[x][y+1]!='|' 28 && map[x][y+1]!='-' && map[x][y+1]!='+') 29 dfs(x,y+1); 30 } 31 32 int main() 33 { 34 long x1,y1,x2,y2,x,y,q,l,i,j,mode,temp; 35 scanf("%ld%ld%ld",&m,&n,&q); 36 for (i=0;i<m;i++) 37 for (j=0;j<n;j++) 38 map[i][j]='.'; 39 for (l=1;l<=q;l++) 40 { 41 scanf("%ld",&mode); 42 if (mode==0) 43 { 44 scanf("%ld%ld%ld%ld",&x1,&y1,&x2,&y2); 45 if (x1==x2) 46 { 47 if (y1>y2) 48 { 49 temp=y1; 50 y1=y2; 51 y2=temp; 52 } 53 for (i=y1;i<=y2;i++) 54 if (map[x1][i]=='-' || map[x1][i]=='+') 55 map[x1][i]='+'; 56 else 57 map[x1][i]='|'; 58 } 59 else 60 { 61 if (x1>x2) 62 { 63 temp=x1; 64 x1=x2; 65 x2=temp; 66 } 67 for (i=x1;i<=x2;i++) 68 if (map[i][y1]=='|' || map[i][y1]=='+') 69 map[i][y1]='+'; 70 else 71 map[i][y1]='-'; 72 } 73 } 74 else 75 { 76 scanf("%ld %ld %c",&x,&y,&c); 77 //从(x,y)开始能到达的点 78 dfs(x,y); 79 } 80 } 81 for (i=n-1;i>=0;i--) 82 { 83 for (j=0;j<m;j++) 84 printf("%c",map[j][i]); 85 printf("\n"); 86 } 87 return 0; 88 } 89 /* 90 16 13 9 91 0 3 1 12 1 92 0 12 1 12 10 93 0 12 10 3 10 94 0 3 10 3 1 95 0 5 6 10 6 96 0 10 6 10 8 97 0 10 8 5 8 98 0 5 8 5 6 99 1 5 4 A 100 */
拓展:
矩形填充颜色
1.
x,y范围很大,如0~10000000
Solution:离散化
2.
很多组数据,如100000000组数据,但但x,y范围较小
逆推,一个位置的值为最后一个填充的值