#include<iostream>
#include <bits/stdc++.h>
using namespace std;
const int MaxSize=10;
int visited[MaxSize]={0};
template <class T>
class Mgraph
{
public:
Mgraph(T a[],int n,int e);
~Mgraph(){}
void DFSTraverse(int v); //深度优先
void BFSTraverse(int v); //广度优先
private:
T vertex[MaxSize];
int edge[MaxSize][MaxSize];
int vertexNum,edgeNum;
};
template <class T>
Mgraph<T>::Mgraph(T a[],int n,int e)
{
vertexNum=n;
edgeNum=e;
int i,j,k,p,q;
for(i=0;i<vertexNum;i++)
{
vertex[i]=a[i];
}
for(i=0;i<vertexNum;i++)
{
for(int j=0;j<vertexNum;j++)
{
edge[i][j]=0;
}
}
for(k=0;k<edgeNum;k++)
{
cout<<"请输入两节点下标:";
cin>>i>>j;
edge[i][j]=1;
edge[j][i]=1;
}
}
template <class T>
void Mgraph<T>::DFSTraverse(int v)
{
cout<<vertex[v]<<" ";
visited[v]=1;
for(int i=0;i<vertexNum;i++)
{
if(edge[v][i]==1&&visited[i]==0)
{
DFSTraverse(i);
}
}
}
template <class T>
void Mgraph<T>::BFSTraverse(int v)
{
for(int i=0;i<MaxSize;i++)
{
visited[i]=0;
}
int Q[MaxSize];
int front=-1,rear=-1;
cout<<vertex[v]<<" ";
visited[v]=1;
Q[++rear]=v;
while(front!=rear)
{
v=Q[++front];
for(int j=0;j<vertexNum;j++)
{
if(edge[v][j]==1&&visited[j]==0)
{
cout<<vertex[j]<<" ";
visited[j]=1;
Q[++rear]=j;
}
}
}
}
int main()
{
string str="ABCDE";
char ch[str.length() + 1];
strcpy(ch,str.c_str());
Mgraph<char> mg(ch,5,5);
for(int i=0;i<MaxSize;i++)
{
visited[i]=0;
}
cout<<"深度优先遍历序列是:";
mg.DFSTraverse(0);
cout<<endl;
cout<<"广度优先遍历序列是:";
mg.BFSTraverse(0);
return 0;
}
![](https://img-blog.csdnimg.cn/direct/ef3179f4e6864f9d9ce4b7f6997ddb18.png)