原数谜是个很有趣的游戏,如图,每一行或每一列空白称为一个回,每一回都对应着一个整数sum,sum就是这回的和。这些空白格里只能填入1—9这九个数字,且在每一回中不能重复。全黑色的格为空,有数字的格,左下角的表示列的和,右上角的表示行的和,则可以得到下面这个图。
但这道题不是原来的数谜,这题与原数谜相比,少了一点规则,就是,每一回中出现的数字可以重复。给你一个n * m 的图,让你填充一下。
看了这题,没有多少思路,借鉴一下解题报告的思想,这题可以用网络流做。以空白格为节点,假设流是从左流入,从上流出的,流入的容量为行和,流出来容量为列和,其余容量不变。求满足的最大流。由于流量有上下限限制,可以给每个数都减掉1,则填出来的数字范围为0—8, 就可以用单纯的网络流搞定了。求出来再加上就可以了。
建图:
一共有四类点:
1. 构造源点S,汇点T
2. 有行和的格子,此类节点设为A
3. 空白格,设为B
4. 有列和的格子,设为C
则可以建边:
1. <S, A> 容量和行和
2. <A, B> 容量为8
3. <B, C> 容量为8
4. <C, T> 容量为列和
当然,反向边容量都置为0。