题意大概是这样,有一个n*n的棋盘,每次可以将棋盘的一行或者一列染成一种颜色,现在给出棋盘的末状态,请给出一种染色的方案,并且要求字典序最小
可以使用类似拓扑排序的方法处理这个问题。对于每种颜色,有三种可能:可以判断横放,可以判断竖放,不可判断。之后不断选出一个在最上面颜色,删去(也就是设置为0)。判断最上面的要求是:该颜色在该行的数目,加上已经被删去(也就是0)的方格,等于列的数目;或该颜色在该列的数目,加上已经被删去(也就是0)的方格,等于行的数目。
注意字典序的处理。因为我们是逆序得到答案的。拓扑排序中,要逆序得到字典序最大,才能得到正序的字典序最小
posted on 2010-10-14 19:19 yzhw 阅读(168) 评论(0) 编辑 收藏 引用 所属分类: graph
Powered by: C++博客 Copyright © yzhw