不太好复制,所以用截图
(直接用屏幕截图截的)
这题感觉不会很难,但为什么只有6个人做出来。。。
题意:
有若干个空心的长方形(宽度=1,边长≥3)叠在一起,已知最后的图形,求长方形叠放的顺序。
题解:
因为一个长方形有可能会被其它的长方形所覆盖一部分(不可能完全覆盖),所以我们先在读入时记录下每一个长方形左上角顶点的坐标和右下角顶点的坐标(找最大和最小的坐标)。
之后我们枚举每一个长方形,枚举每一条边。
例如这样一个图:
我们先枚举红色长方形的上边(黄圈),发现未被覆盖。
之后枚举左侧,同样未覆盖。
当我们枚举下侧时,发现被蓝色长方形覆盖了(黑圈)
因为原来属于红色长方形的格子现在是蓝色长方形的格子,所以红色长方形被蓝色长方形所覆盖了。
之后右侧也如此。
之后我们再枚举蓝长方形,发现未被覆盖。
红长方形被蓝长方形所覆盖了,所以红长方形在蓝长方形的下面。
如果长方形的某一部分被其它长方形所覆盖了,那么就用一个数组D[i,j]表示编号为i的长方形被编号为j的长方形所覆盖。
之后估计大多数人都会选择拓扑,我也如此,结果
后来我仔细读题,发现其实答案不止一个。。。
正解:
处理完长方形的覆盖顺序后,我们可以用DFS去求解答案。
因为一开始可能会出现多个长方形为底的情况,所以我们要枚举每一个在最底部的长方形进行DFS。
之后枚举覆盖当前长方形的其它长方形,把这些长方形的出度-1。
如果当前长方形已经处于最顶端。就把当前DFS所产生的方案记录进答案里。
(不知道为什么,每次记录答案都会有重复的,所以要判断当前方案是否与上一个方案相同,如果不同就放进去)
最后转成字母输出。
感觉这道题挺水的,就是有点坑。。。