第一次的AC的代码A*里面扩展点的循环是这样的:
for(int i=head2[tx.now];i!=0;i=ed2[i].nex)
{
st a;a.now=ed2[i].to;a.g=tx.g+ed2[i].v;a.f=tx.g+ed2[i].v+dis[ed[2].to];
p.push(a);
}
但是我发现了一个笔误:
st a;a.now=ed2[i].to;a.g=tx.g+ed2[i].v;a.f=tx.g+ed2[i].v+dis[ed[2].to];
这里的ed[2].to应该是ed2[i].to,也就是:
st a;a.now=ed2[i].to;a.g=tx.g+ed2[i].v;a.f=tx.g+ed2[i].v+dis[ed2[i].to];
蒟蒻求问为什么第一份代码能过。