資料結構實驗七 圖(深度優先遍歷)
阿新 • • 發佈:2019-02-02
一、 實驗目的
1. 熟悉圖的鄰接矩陣和鄰接表的儲存結構
2. 熟悉圖的鄰接矩陣和鄰接表的建立演算法
3. 掌握圖的遍歷演算法
二、 實驗內容
1. 無向圖採用鄰接矩陣儲存,編寫深度優先搜尋遍歷演算法,從不同的頂點出發對無向圖進行遍歷。
//mgraph.h
//無向圖類
#include<iostream>
using namespace std;
const int size=10;
template<class T>
class mgraph //建立mgraph類,無向圖
{
private:
T vertex[size]; //vertex:頂點
int visited[size];
int arc[size][size]; //arc:邊
int vernum,arcnum; //頂點數量和邊的數量
public:
mgraph(T a[],int n,int e); //建構函式
~mgraph(){} //解構函式
void DFS(int v); //深度優先遍歷
};
template<class T>
mgraph<T>::mgraph(T a[],int n,int e)
{
int i,j;
vernum=n;
arcnum=e;
for (i=0;i<vernum;i++)//頂點
{
vertex[i]=a[i];
visited[i]=0;
}
for(i=0;i<vernum;i++)//初始化邊
{
for(j=0;j<vernum;j++)
{
arc[i][j]=0;
}
}
for(int k=0;k<arcnum;k++)//有聯絡的邊為1
{
cin>>i>>j;
arc[i][j]=1;
arc[j][i]=1 ;
}
}
template<class T>
void mgraph<T>::DFS(int v)//深度優先遍歷
{
cout<<vertex[v];
visited[v]=1;
for(int j=0;j<vernum;j++)
{
if(arc[v][j]==1&&visited[j]==0)
DFS(j);
}
cout<<endl;
}
#include<iostream>
#include"mgraph.h"
using namespace std;
int main()
{
char a[]="ABCDEFGH";
mgraph<char> s(a,8,10);
char b;
cout<<"從哪一點開始?"<<endl;
cin>>b;
s.DFS(b-'A');
return 0;
}