针对搜索的一个常见错误

说来惭愧,ACM一直都单挑能力不行,发现自己的代码能力很差,经常自己写代码不走心,所以容易出现很多的低级错误。这里作为这个栏目的第一篇,我觉得有必要记录自己的常见错误的地方,以后注意力放上面就不容易出问题。

今天写了一个搜索题目,看起来比较难,其实很简单,就是普通的最短路添加了一个分值。。对于这个题目,只要在松弛的同时保持最大的score就可以,也是很常见的,我很容易出错的多重if判断。很容易少考虑。

考虑目前的边 t -> e ,路径权值是w , maxsco为维护的最大的score, 而sco[i]为i的分值,只要到上面就可以获得的分值。不要去简写这种复杂的松弛,尽量使所有的< ,  ==  , >都判断一下,除非不要,不要使用>=啥的,容易少考虑。多写函数来解决重复的代码,否则容易出现你改了这个忘了那个的情况。

if(dis[t] + w < dis[e]) {

dis[e] = dis[t] + w ; 

maxsco[e] = maxsco[t] + sco[e] ;  /// 出错之处,没有考虑如果小于直接想等。

PUSH(e)

}

else if(dis[t] + w == dis[e] && maxsco[e] < maxsco[t] + sco[e] ) {

maxsco[e] = maxsco[t] + sco[e]  ; 

PUSH(e)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值