puzzle(1022)数图、水箱、方阵和

目录

一,数图(数织、Picross、Nonograms)

PicrossMadness

Nonograms

策略

二,数图逻辑分析

1,数图的隐含规则

2,数图的生成

3,关卡类型

三,彩色数图

1,伪退化

2,滤波器

3,彩色数图Plus

五,水箱

6*6

10*10

六,方阵和

4x4

5x5

6x6


一,数图(数织、Picross、Nonograms)

规则:给出一行或者一列的每一段连续的1的数目,隔开就另算一段,据此推理出所有格子是1或者0

PicrossMadness

标准数图

swf下载链接:资源分享汇总_csuzhucong的博客-CSDN博客

swf的游戏,既可以用IE打开,也可以使用Flash播放器打开

谜题:

答案:

Nonograms

也是标准数图,在线play

策略

来自全民数独中的策略:

 

 

 

 

二,数图逻辑分析

1,数图的隐含规则

结合维基百科的说法,一般数图都是唯一解数图,但是也有多解数图。

这一点就和数独一样,一般我们说数图就是指唯一解数图。

多解数图示例:

一般的数图都会给出一行或者一列的每一段的数目,隔开就另算一段。

而最强大脑的康斯逆推是只给出一行或一列的总数目,所以是多解数图。

2,数图的生成

玩数图很容易就会想到一个关于生成规则的问题:

如果我对一个二维表格的所有格子随机填成0或者1,然后按照数图的规则统计每行每列的信息,这样得到的数图一定是唯一解数图吗?

因为上一节已经给出了答案,所以显然是不一定,可能是多解数图。

那么问题来了,有没有简单的方法,判断一个数图是不是唯一解数图?

我猜测这个问题的复杂度可能和求解数图的复杂度相同(NP完全问题)。

一般的数图游戏APP应该都是只提供唯一解数图,因为一般来说多解数图应该是更难的。(和数独一样)。

生成唯一解数图的一种方法是,随机生成一个数图,然后用算法判断是不是唯一解数图。

有可能存在别的生成方法,按照某种模式来生成数图,就一定是唯一解数图。

3,关卡类型

按照游戏攻略综述的分类方法,因为要排除多解数图,所以是半自动关卡,而不是自动关卡。

三,彩色数图

最强大脑中的彩色数图:

看第一行就清楚了规则,6绿和6红是可以挨着的。

1,伪退化

如果我们直接把颜色抹除,得到一个伪数图,即在数图的规则上改成,数字和数字有可能其实是挨着的,那么还有唯一解吗?

很明显,答案是不一定,反例也很容易构造:

唯一解:

 

 伪退化:

 它作为数图倒是有唯一解:

作为伪数图自然就没有唯一解了。

 结论:有唯一解的彩色数图,经过伪退化得到的伪数图不一定有唯一解

换个角度理解,彩色数图拥有更多的信息。

2,滤波器

如果把彩色数图的一个颜色单独拿出来,得到的数图是唯一解数图吗?

PS:得到的是数图,而不是伪数图。

答案仍然是不一定,反例也不难构造:

 唯一解:

 蓝色单独拿出来:

 这个数图有2个解。

3,彩色数图Plus

如果把周围的数字改成单色数字,不透露数字和颜色的对应关系,但额外给出每个颜色的总数,应该会稍微难一点。

3种块的数量分别是4,10,2

唯一解:

最强大脑同款项目(极夜之途A项目):

五,水箱

在线play

1、游戏棋盘被分成几块,每块被称为一个“水箱”
2、游戏中你可以给每个水箱灌一些水,也可以让它空着
3、同一个水箱内的水位是等高的,即同一水箱内的同一行的单元格,要么都有水,要么都空着。
4、棋盘外面的数字是该行或该列灌水的单元格总数。

6*6

 

   

10*10

 

六,方阵和

在线play

每个方格均有两个分数 (分别写于左方及上方)。每个方格中只有两个可能性:黑或白。

游戏目标为决定每一格的黑白。
1. 每个横列/直栏的第一格有1分,第二格有2分,如此类推
2. 涂黑的方格才会计算分数
3. 右边的数字是该横列的分数总和
4. 下方的数字是该直栏的分数总和

4x4

 

5x5

  

6x6

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单词搜索迷宫(Word Search Puzzle)问题是一个经典的算法问题,其输入是一个二维的字符数组和一组单词,目标是找出字符数组网格中的所有单词。这些单词可以是水平的、垂直的或者是任意的对角线方向,所以需要查找8个不同的方向。解决这个问题的一种常见方法是使用回溯算法,具体步骤如下: 1. 遍历二维字符数组,对于每个字符,以其为起点开始搜索,搜索的方向包括水平、垂直和对角线方向。 2. 对于每个搜索到的单词,将其记录下来。 3. 重复步骤1和2,直到遍历完整个二维字符数组。 下面是一个使用C#语言实现的单词搜索迷宫算法的示例代码: ```csharp class WordSearchPuzzle { private char[,] grid; private HashSet<string> words; public WordSearchPuzzle(char[,] grid, HashSet<string> words) { this.grid = grid; this.words = words; } public void Solve() { int rows = grid.GetLength(0); int cols = grid.GetLength(1); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { Search(i, j, new StringBuilder()); } } } private void Search(int row, int col, StringBuilder sb) { if (row < 0 || row >= grid.GetLength(0) || col < 0 || col >= grid.GetLength(1)) { return; } sb.Append(grid[row, col]); string word = sb.ToString(); if (words.Contains(word)) { Console.WriteLine("Found '{0}' at [{1}, {2}] to [{3}, {4}]", word, row, col, row - sb.Length + 1, col - sb.Length + 1); } if (word.Length < 3) { Search(row + 1, col, sb); Search(row - 1, col, sb); Search(row, col + 1, sb); Search(row, col - 1, sb); Search(row + 1, col + 1, sb); Search(row - 1, col - 1, sb); Search(row + 1, col - 1, sb); Search(row - 1, col + 1, sb); } sb.Remove(sb.Length - 1, 1); } } // 使用示例 char[,] grid = new char[,] { {'t', 'h', 'i', 's'}, {'w', 'a', 't', 's'}, {'o', 'a', 'h', 'g'}, {'f', 'g', 'd', 't'} }; HashSet<string> words = new HashSet<string>() { "this", "two", "fat", "that" }; WordSearchPuzzle puzzle = new WordSearchPuzzle(grid, words); puzzle.Solve(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值