首页 > 其他 > 详细

洛谷 P1162 填涂颜色

时间:2020-05-15 19:02:35      阅读:49      评论:0      收藏:0      [点我收藏+]

                                                    技术分享图片

    洛谷上标签显示算法是 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("\n");
60     }
61 }

 

洛谷 P1162 填涂颜色

原文:https://www.cnblogs.com/zkw666/p/12896191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!