没办法,我就这个点最兴奋,刚两点的时候在楼下看马克思,然后饿了,上来泡面,顺便寂寞一把……
题目大意:给出一个 n*m 矩阵,矩阵代表了一个大房间,然后矩阵的每个元素代表了该模块的信息,用 1 表示 WEST 方向是墙壁,2 表示 NORTH 方向是墙, 4 表示 EAST 方向是墙, 8 表示 SOUTH 方向是墙,题目所给矩阵的元素值就是该模块所有墙壁数值总和,现在要求统计这个大房间被分成了几个区域,其中最大区域包含几个模块。
显然的,BFS,DFS可解,我用的是并查集(= =!不想写搜索,对搜索的代码有阴影……)。其实这不是重点,关键是怎么把数字矩阵转化成我们想要的图形矩阵,就是从一个模块所有墙壁数值总和看出这个模块都有哪几面墙,这是这道题的亮点
本人用的应该是最笨的方法了,直接枚举打表所有可能……就 0 ~ 15 嘛,也不多哈……
看了神牛的报告,发现,用位运算的话会风骚很多……
1 的2进制 0001,2 的是 0010,4 的是 0100,8 的是 1000,例如 11 取2进制 1011,只有 4 和 11 取 & 运算是 0 ,即该模块在 4 方向(也就是 EAST 方向)是通的。
代码: