编程 Logic/Psuedocode

Programming Logic/Psuedocode

我需要为我的 class 编写一些伪代码,但我对如何做这个问题感到困惑:

有一个 NxN 网格 (1 < N < 1300)。您必须在每个 2x2 子网格中恰好放置 2 个项目(假设每种情况都有一个解决方案)。打印每个解决方案。

输入示例: 3

输出示例:

111
000
111

000
111
000

101
010
101


010
101
010

等... (其中 0 为空 space 并取 1)

奖励:如果网格中的每个方块都被加权,请说明如何找到最佳解决方案。

生成一些解决方案的一种简单方法是任意选择第一行,然后通过减去前一行来填充后续的每一行。我们也可以对列执行此操作。

事实证明,每个有效矩阵都是由这两个变体之一生成的(请注意,两个完美的棋盘是由两者生成的)。原因是,如果第一行有相邻的零或相邻的零,则强制其下方的条目,这些条目强制该行的其余部分减去前一行,然后强制其余行。同上专栏。如果第一行和第一列都没有重复项,那么我们就有了两个棋盘中的一个。

最大化并不难。对于交替行,为每一列决定是偶数行还是奇数行更有价值。对于交替列,决定每一行是偶数列还是奇数列更有价值。充分利用这两种解决方案。