Luogu P1162填涂颜色 +BFS

来源:互联网 发布:网络产品价格的特点 编辑:程序博客网 时间:2024/05/01 20:43

题目大意

给出一个n*n的矩阵,有一堆“1”围住了“0”。把0转化成“2”输出。

分析

把外围的“0”全弄成“2”,然后每个数输出时-2
那么怎么转换呢?
这里就要用到一种叫做BFS(深搜)有趣算法了。
以下引用廖哥的话

毛主席说过:“星星之火,可以燎原。”那么BFS实际上就是一排排横着搜。

本题的话,开全局变量的数组(全是0)从(0,0)开始搜
为什么不从(1,1)搜?
考虑以下情况:
0 1 1 0
1 0 0 1
1 0 0 1
0 1 1 0
显然从(1,1)搜是不行的

代码

#include<bits/stdc++.h>using namespace std;int i,m,n,j,k;int a[40][40];inline void bfs(int x,int y){    if(x<0 || x>n+1 || y<0 || y>n+1 || a[x][y]==1 || a[x][y]==2)return;    a[x][y]=2;    bfs(x+1,y);    bfs(x-1,y);    bfs(x,y+1);    bfs(x,y-1);    return;}int main(){    cin>>n;    for(i=1;i<=n;i++)        for(j=1;j<=n;j++)            scanf("%d",&a[i][j]);    bfs(0,0);    for(i=1;i<=n;i++){        cout<<2-a[i][1];        for(j=2;j<=n;j++)            cout<<" "<<2-a[i][j];        cout<<endl;    }//严格按照格式输出    return 0;} 
0 0
原创粉丝点击