题目解析
一颗棋子的气就是它上下左右 「空点」的数量。
若一颗棋子不和其他棋子共享气,我们直接统计下其周围的「空点」的数量即可;
如果棋子和其他棋子共享气,那么我们可以使用 DFS/BFS\tt{DFS/BFS}DFS/BFS 把这一整块共享气的棋子全部找出来,然后把这些棋子周围的空点数量 XXX 统计出来,那么对于这块共享气的棋子每个棋子的气都是 XXX。
AC代码
复杂度分析
使用 DFS/BFS\tt{DFS/BFS}DFS/BFS 找出所有一个棋子及其共享气的棋子总的时间复杂度为 O(N2)\mathrm{O}(N^2)O(N2);
使用 std::set 找出这块棋子周围的空点数量的时间复杂度为 O(N2logN2)\mathrm{O}(N^2 \log{N^2})O(N2logN2)。
总的时间复杂度为 O(N2logN2)\mathrm{O}(N^2 \log{N^2})O(N2logN2)。