• 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("
    ");
     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范围较小
    逆推,一个位置的值为最后一个填充的值

  • 相关阅读:
    状压DP之排列perm
    CodeForces 578F Mirror Box
    Berlekamp-Massey算法
    图解git操作
    yapi安装
    springcloud gateway
    springcloud alibaba
    反射和内置方法
    绑定方法与非绑定方法
    多态性和鸭子类型
  • 原文地址:https://www.cnblogs.com/cmyg/p/6704845.html
Copyright © 2020-2023  润新知