圖的鄰接表存儲及深度優先遍歷程序

/*此程序僅適合強連通圖*/
#include<iostream>
#include<string>
using namespace std;
struct ArcNode                 //定義邊表結點
{
int adjvex;                //鄰接點域,存放該頂點的臨界點在頂點表中的下標
ArcNode * next;            //爲指針域,指向邊表中的下一個節點
};
struct VertexNode
{
string vertex;               //爲數據域,存放頂點信息
ArcNode * firstedge;       //爲指針域,指向邊表中的第一個節點
};
const int MaxSize = 10;
class ALGraph
{
private:
VertexNode adjlist[MaxSize];//存放頂點表的數組
int vertexNum, arcNum;     //圖的頂點數和邊數
int visited[MaxSize];
public:
ALGraph(string a[], int n, int e);
~ALGraph(){}
void DFSTraverse(int v);//深度優先遍歷函數
};
ALGraph::ALGraph(string a[], int n, int e)
{
vertexNum = n;
arcNum = e;
for (int i = 0; i < vertexNum; i++)
{
adjlist[i].vertex = a[i];
adjlist[i].firstedge = NULL;
}
for (int k = 0; k < arcNum; k++)
{
int i, j;
cin >> i >> j;
ArcNode * s = new ArcNode;
s->adjvex= j;
s->next = adjlist[i].firstedge;
adjlist[i].firstedge = s;
}
for (int i = 0; i < MaxSize; i++)
{
visited[i] = 0;
}
}
void ALGraph::DFSTraverse(int v)
{
cout<<adjlist[v].vertex <<"\t";
visited[v] = 1;
ArcNode *p = adjlist[v].firstedge;
while (p != NULL)
{
int j = p->adjvex;
if (visited[j]==0) DFSTraverse(j);
p = p->next;
}
}
int main()
{
string a[4] = { "v0", "v1", "v2", "v3" };
int i, j;
cout << "輸入你的圖的邊數i:";
cin >> i;
cout << endl;
ALGraph s(a, 4, i);                  
cout << "輸入你想要進行深度遍歷的頭節點的下標j:";
cin >> j;
cout << endl;
cout << "深度遍歷的結果爲:" << endl;
s.DFSTraverse(j);
cout << endl;
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章