Luogu P1162填涂颜色 +BFS

题目大意

给出一个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
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<//严格按照格式输出
    return 0;
} 

你可能感兴趣的:(总结,题目带,算法/数据结构)