广度优先搜索遍历的原理:广度优先搜索算法遍历类似于树的按层次遍历。设图G的初态是所有顶点均未访问过,在G中任选一顶点vi为初始出发点,则广度优先搜索的基本思想是:首先访问出发点vi,接着依次访问vi的所有邻接点,再接着访问邻接着的所有未曾访问过的顶点,依次类推,直至图中所有和初始出发点vi有路径相通的顶点都已访问到为止。
图的广度优先搜索遍历的算法:
设vi和vj是俩个相继被访问过的顶点,若当前是以vi为出发点进行搜索,则在访问vi的所有未曾访问过的邻接接点之后,紧接着是以vj为出发点进行横向搜索,并对搜索到的vj的邻接点中尚未被访问的顶点进行访问。也就是说,先访问的顶点其邻接点亦先被访问。因此,需要进队列保存已访问过的顶点。
template<class T>
void AbstractGraph<T>::BFSTraverse(int v) //从顶点v出发对非连通图进行一次广度优先搜索遍历
{
bool *visited = new bool[VertexCount()]; //访问标记数组
int i;
for(i=0;i<VertexCount();i++) //设置未访问标记
visited[i] = false;
i = v;
do{
if(!v