首页 > 其他 > 详细

洛谷P1162 填涂颜色【bfs】

时间:2019-02-03 17:14:26      阅读:204      评论:0      收藏:0      [点我收藏+]

题目链接:https://www.luogu.org/problemnew/show/P1162

题意:

有一个0和1组成的矩阵,一些1组成一个闭合圈,圈住一些0,现在要把被圈住的这些0变成2输出。

思路:

bfs,判断每个0可以到达的边界。

如果这个0是可以到达矩阵的边界的说明没有被圈住。

bfs时不把1加入队列,如果最后也不能到达边界说明是被圈住的,变成2就行了。

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<map>
 4 #include<set>
 5 #include<iostream>
 6 #include<cstring>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<queue>
10 
11 using namespace std;
12 
13 int n;
14 int mat[35][35];
15 typedef pair<int, int> pr;
16 int dx[4] = {-1, 1, 0, 0};
17 int dy[4] = {0, 0, -1, 1};
18 bool vis[35][35];
19 
20 bool check(int i, int j)
21 {
22     return (i >= 0 && j >= 0 && i < n && j < n);
23 }
24 
25 bool bfs(int i, int j)
26 {
27     memset(vis, 0, sizeof(vis));
28     queue<pr>que;
29     que.push(make_pair(i, j));
30     while(!que.empty()){
31         pr p = que.front();que.pop();
32         if(p.first == 0 || p.first == n - 1 || p.second == 0 || p.second == n - 1)return false;
33         for(int k = 0; k < 4; k++){
34             int x = p.first + dx[k], y = p.second + dy[k];
35             if(check(x, y) && mat[x][y] != 1 && !vis[x][y]){
36                 que.push(make_pair(x, y));
37                 vis[x][y] = true;
38             }
39             
40         }
41     }
42     return true;
43 }
44 
45 int main()
46 {
47     scanf("%d", &n);
48     for(int i = 0; i < n; i++){
49         for(int j = 0; j < n; j++){
50             scanf("%d", &mat[i][j]);
51         }
52     }
53     
54     for(int i = 0; i < n; i++){
55         for(int j = 0; j < n; j++){
56             if(mat[i][j] == 0){
57                 if(bfs(i, j)){
58                     mat[i][j] = 2;    
59                 }
60             }
61         }
62     }
63     
64     for(int i = 0; i < n; i++){
65         printf("%d", mat[i][0]);
66         for(int j = 1; j < n; j++){
67             printf(" %d", mat[i][j]);
68         }
69         printf("\n");
70     }
71     return 0;
72 }

 

洛谷P1162 填涂颜色【bfs】

原文:https://www.cnblogs.com/wyboooo/p/10350573.html

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