• 洛谷 P1162 填涂颜色


                                                        

        洛谷上标签显示算法是 bfs,所以肯定是用广搜啦。

      我的思路是在所给的方针外在添一圈0;也就是这样:

    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 1 1 1 1 0
    0 0 1 1 0 0 1 0
    0 1 1 0 0 0 1 0
    0 1 0 0 0 0 1 0
    0 1 1 1 1 1 1 0
    0 0 0 0 0 0 0 0

      再从左上角的第一个数开始搜索,如果搜到1的话,再换一个方向搜,用一个数组vis来存储搜到的点,最终将所搜到的点排除,再排除值为1的点,最终剩下的点再赋值为2就可以了,具体看代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<queue> //STL队列
     5 using namespace std;
     6 int a[35][35];
     7 struct zkw{
     8     int x;
     9     int y;
    10 };
    11 zkw w;
    12 bool vis[35][35];
    13 int dx[4]={1,-1,0,0}; //方向
    14 int dy[4]={0,0,-1,1}; //方向
    15 queue<zkw> q;
    16 int main()
    17 {
    18     memset(a,0,sizeof(a));
    19     memset(vis,0,sizeof(vis));
    20     int n;
    21     cin>>n;
    22     for(int i=1;i<=n;++i)
    23     {
    24         for(int j=1;j<=n;++j)
    25         {
    26             scanf("%d",&a[i][j]);
    27         }
    28     }
    29     q.push((zkw){0,0});
    30     vis[0][0]=1;
    31     while(!q.empty())
    32     {
    33         w=q.front();
    34         q.pop();
    35         for(int i=0;i<4;++i)
    36         {
    37             int xx=w.x+dx[i],yy=w.y+dy[i];
    38             if(xx>=0 && xx<=n+1 && yy>=0 && yy<=n+1 && vis[xx][yy]==0 && a[xx][yy]!=1) //在范围内符合要求的点
    39             {
    40                 vis[xx][yy]=1;
    41                 q.push((zkw){xx,yy});
    42                 
    43             }
    44         }
    45     }
    46     for(int i=1;i<=n;++i)
    47     {
    48         for(int j=1;j<=n;++j)
    49         {
    50             if(vis[i][j]==0 && a[i][j]!=1) a[i][j]=2;
    51         }
    52     }
    53     for(int i=1;i<=n;++i)
    54     {
    55         for(int j=1;j<=n;++j)
    56         {
    57             cout<<a[i][j]<<" ";
    58         }
    59         printf("
    ");
    60     }
    61 }
  • 相关阅读:
    [哈希][倍增] Jzoj P5856 01串
    [exgcd] Jzoj P5855 吃蛋糕
    [折半搜索][分治][二分] Jzoj P5851 f
    [lca][主席树] Jzoj P5850 e
    [二分][树状数组] Jzoj P5849 d
    [容斥] Jzoj P5843 b
    [前缀和][枚举] Jzoj P5842 a
    [平衡规划][模拟][前缀和] Jzoj P4724 斐波那契
    [spfa] Jzoj P4722 跳楼机
    [模拟] Jzoj P2499 东风谷早苗
  • 原文地址:https://www.cnblogs.com/zkw666/p/12896191.html
Copyright © 2020-2023  润新知