一、DFS
传入数组的位置
v表示数组的位置,初始点的位置 ,调用的时候传入。
二、广度优先BFS
类似层次遍历
图中的层,可以看成相邻的结点
下图所示:
//遍历
//DFSk=====类似前序遍历,
template<class T, class E>
void Graph<T, E>::DFS(int v) //v表示起点
{
Edge<T, E> *p;
visited[v] = true;
cout << NodeTable[v].data<<" -> ";
p = NodeTable[v].adj;
while (p != 0)
{
if (!visited[p->dest])
DFS(p->dest);
p = p->link;
}
}
//BFS====层次遍历
//不需要初始值
template<class T, class E>
void Graph<T, E>::BFS()
{
int v=0; //根结点的下标
Edge<T, E>* p;
queue<int> qu;//定义一个队列
cout << "输入一个出发点的位置:" << endl;
cin >> v; //
qu.push(v);
visited[v] = true; //这里表示入列
while (!qu.empty())
{
v = qu.front(); //取队头元素
qu.pop(); //弹出队头元素
cout << NodeTable[v].data<<" -> ";
p = NodeTable[v].adj;
//找邻接点
while (p != 0)
{
qu.push(p->dest);
p = p->link;
}
}
}