最近发现学过的东西很容易忘,就算写的在水,还是写下来,至少可以帮助自己回忆一遍。虽然前22章很多习题证明还没有弄懂看明白,但这样一本大部头书,还是尽快能先过一遍吧,22章我来了。
广度优先搜索算法其实就是在每条边的权重都是1的情况下求单源最短路径。书上用了一大堆引理,来证明广度优先搜索求最短路径的正确性,其实吧,我觉得我们用脑子想想能够得到显然正确。当然算法的设计离不开严格的证明,看懂证明也更有利于我们理解算法的精髓。
每个点都有一个值d表示当前从s到该点的最短距离,初始化s.d为0,其他点的d为无穷大
广度优先搜索法过程:从s出发,第一次感染s能到达的点,设为点集V1,V1中点的d变为s.d+1, 第二次V1中每个点向外感染得到点集V2, V2中各点d为感染者v.d+1得到,其中v属于V1,第三次V2中每个点向外感染,。。。直到所有点都被感染。
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
class node
{
public:
node():adjvex(0),nextvex(NULL){}
int adjvex;
no