【p1162-填充颜色】解题记录

来源:互联网 发布:蚕丝被淘宝评价 编辑:程序博客网 时间:2024/05/20 20:04

题目链接

这道题的主要有两个方法:

  1. 在棋盘外再加一层 0,这样圈外的所有 0 就都连起来了,然后随便找一个棋盘外的 0 开始 bfs,就可以把所有的圈外 0 标记,然后未标记的 0 就都是圈内的了。(不直接挑一个棋盘内的 0 开始 bfs 是因为圈外的 0 可能被圈截成两半,这时无法标记所有圈外的 0)。

  2. 只有圈内的 0 的上下左右方向都有 1 。圈外的 0 至少一个方向上没有 0 。

以下是第一种方法的代码:

#include <cstdio>using namespace std;int size; const int maxn= 40;int map[maxn][maxn];void fill(int line, int col){    if(line<0||line>size+1||col<0||col>size+1) return;    int &now= map[line][col];    if(now==-1||now==1){        return;    }    now= -1;    fill(line+1, col);    fill(line-1, col);    fill(line, col+1);    fill(line, col-1);    }int main(){    scanf("%d", &size);    for(int i=1; i<=size; ++i){        for(int j=1; j<=size; ++j){            scanf("%d", &map[i][j]);        }    }    fill(0,0);    for(int line=1; line<=size; ++line){        for(int col=1; col<=size; ++col){            int now= map[line][col], num;            if(now==-1) num= 0;            if(now==1) num=1;            if(now==0) num=2;            printf("%d ", num);        }        putchar('\n');    }    return 0;}
0 0
原创粉丝点击