这道题的主要有两个方法:
在棋盘外再加一层 0,这样圈外的所有 0 就都连起来了,然后随便找一个棋盘外的 0 开始 bfs,就可以把所有的圈外 0 标记,然后未标记的 0 就都是圈内的了。(不直接挑一个棋盘内的 0 开始 bfs 是因为圈外的 0 可能被圈截成两半,这时无法标记所有圈外的 0)。
只有圈内的 0 的上下左右方向都有 1 。圈外的 0 至少一个方向上没有 0 。
以下是第一种方法的代码:
#include <cstdio>
using namespace std;
int size;
const int maxn= 40;
int map[maxn][maxn];
void fill(