- bfs中vis[x][y]=1应该在处理当前点时进行,而不是一添加到队列中就标记。
情况如下:
1 2 3
4 5 6
从1开始时,2、4都被加入到第二步的选择们中,接着访问2时,2将5加入到第三步的选择们中,如果5一加入队列就就标记,那么在第二步选择4时,对4来说第三步就不能是5了。因此是在处理当前节点时,即进行到第n+1步是才标记以防影响第n步的选择。 - 同时使用优先队列的话priority_queue<node,vector<node>,greater<node>> q,让当前步骤中,权值小的排在前面,这样在访问这个最优节点后,由于标记了vis,这样之后就不会访问当前步骤中其他权值大的节点,从而实现了选择。由于每一步都只访问了最优解,则下一步的所有选择都是基于最优解之上的,则下一步的所有选择的权值都是大于当前最优解的权值,因此在优先队列中下一步骤的选择们不会影响当前步骤选择们的顺序。