#780. 剪邮票

剪邮票

题目描述

给定一个由若干相连邮票组成的矩形网格(如3×3、4×4等),每次可剪掉一张邮票,要求最终剩余的邮票必须连通(上下左右相邻)。求合法的剪法总数。

输入格式

第一行输入邮票网的大小数据,邮票的行数与列数,接下来输入矩形网格数据,表示邮票位置。

输出格式

输出合法的剪法总数数据

样例

输入样例 1

3 3
0 0   0 1   0 2
1 0   1 1   1 2
2 0   2 1   2 2

输出样例 1

合法的剪法总数为:218

输入样例 2

3 3
-1 -1  0 1  0 2
1 0     1 1  1 2
2 0     2 1  2 2

输出样例 2

合法的剪法总数为:118

输入样例 3

3 3
0 0    0 1    0 2
1 -1  1 -1   1 2
2 0    2 1    2 2

输出样例 3

合法的剪法总数为:30

提示

解题思路:1.DFS枚举删除顺序:从所有邮票中选择保留k张(k从1到总邮票数-1),通过DFS生成所有可能的删除顺序组合。例如,3×3邮票可剪掉1-8张,需枚举所有组合。 2.BFS检查连通性:对每种删除后的剩余邮票集合,以任意一张邮票为起点,用BFS遍历所有可达邮票,判断是否覆盖所有剩余邮票。 若遍历到的邮票数量等于剩余总数,则连通;否则不连通。