题目:
如上图方格中黑圈表示城堡,黑色方框表示墙,墙的位置事先已经确定好,我们要做的是求出最多可以放置多少个城堡,使得同一行或者同一列中只有一个城堡,除非他们中间有墙隔着。如上图中:第二幅是正确配置且已是最多的城堡数量,第三幅虽然配置正确,但是不是做多数量的城堡,最后两幅配置错误。
示例:
Sample Input
4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0
Sample Output
5 1 5 2 4
本题的关键是掌握回溯算法,在我的代码中在函数dfs()中体现。一般回溯算法分三步,第一步是判断什么时候回溯结束同时对结果做改变,这里的结果指每一种方案的城堡数,第二步是满足条件做操作,这里指放城堡,第三步是递归,总之是通过一步步深入,有一步步返回的方式完成所有的可能情况。
代码: