[GESP202403 七级] 俄罗斯方块

GESP编程共123题,本题是整站第1407题,已经有人完成了本题,加油!

题目描述

小杨同学用不同种类的俄罗斯方块填满了一个大小为 n×m 的网格图。

网格图由 n×m 个带颜色方块构成。小杨同学现在将这个网格图交给了你,请你计算出网格图中俄罗斯方块的种类数。
如果两个同色方块是四连通(即上下左右四个相邻的位置)的,则称两个同色方块直接连通;若两个同色方块同时与另一个同色方块直接或间接连通,则称两个同色方块间接连通。一个俄罗斯方块由一个方块和所有与其直接或间接连接的同色方块组成。定义两个俄罗斯方块的种类相同当且仅当通过平移其中一个俄罗斯方块可以和另一个俄罗斯方块重合;如果两个俄罗斯方块颜色不同,仍然视为同一种俄罗斯方块。

例如,在如下情况中,方块 1 和方块 2 是同一种俄罗斯方块,而方块 1 和方块 3 不是同一种俄罗斯方块。

输入格式

第一行包含两个正整数 n 和 m,表示网格图的大小。
对于之后的 n 行,第 i 行包含 m 个正整数 ai1​,ai2​,…aim​,表示该行 m 个方块的颜色。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1

5 6
1 2 3 4 4 5
1 2 3 3 4 5
1 2 2 3 4 5
1 6 6 7 7 8
6 6 7 7 8 8

输出 #1

7

说明/提示

子任务 分数 n,m≤ 特殊约定
1 30 20 所有俄罗斯方块大小不超过 5×5
2 30 500 所有俄罗斯方块大小均为 1×x 或 x×1 类型,其中 x 是任意正整数
3 40 500

对全部的测试数据,保证 1≤n,m≤500,1≤ai,j​≤n×m。

别灰心,再试一次!

真题解析

【题目大意】给定一个由若干个不同种类的俄罗斯方块构成的n*m的网格图,求有多少种不同种类的俄罗斯方块,相同种类的俄罗斯方块定义为仅通过平移可以重合。

【考纲知识点】图的遍历,哈希表

【解题思路】通过泛洪算法将所有的俄罗斯方块找出来,然后设计一个哈希算法进行哈希,该哈希算法必须保证与俄罗斯方块的具体位置无关,仅与形态有关,一个比较好的方法是将所有位置与该俄罗斯方块的首位置做差并排序,然后对这个序列进行哈希,设计哈希算法时要尽量避免冲突。最后判断有多少个不同的哈希值即可。

【参考程序】

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。