fir net 深度优先搜索 回朔算法 c++

题目:

如上图方格中黑圈表示城堡,黑色方框表示墙,墙的位置事先已经确定好,我们要做的是求出最多可以放置多少个城堡,使得同一行或者同一列中只有一个城堡,除非他们中间有墙隔着。如上图中:第二幅是正确配置且已是最多的城堡数量,第三幅虽然配置正确,但是不是做多数量的城堡,最后两幅配置错误。

示例:

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()中体现。一般回溯算法分三步,第一步是判断什么时候回溯结束同时对结果做改变,这里的结果指每一种方案的城堡数,第二步是满足条件做操作,这里指放城堡,第三步是递归,总之是通过一步步深入,有一步步返回的方式完成所有的可能情况。

代码:

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值