#include<iostream>
using namespace std;
const int maxsize=20;
class algraph
{
public:
algraph(char a[],int n,int e);
void DFSTraverse(int v);
void BFSTraverse(int v);
private:
char vertex[maxsize]; //存放顶点的数组
int arc[maxsize][maxsize];
int vertexnum;
int arcnum;
int visited[maxsize]; //判断该点是否已访问
};
void main()
{
int n;
int e;
char a[10]={'0','1','2','3','4','5','6','7','8','9'};
cout<<"输入顶点的个数:";
cin>>n;
cout<<"输入边数:";
cin>>e;
algraph A(a,n,e);
cout<<"深度优先遍历\n";
A.DFSTraverse(0);
cout<<"\n";
cout<<"广度优先遍历\n";
A.BFSTraverse(0);
cout<<"\n";
}
algraph::algraph(char a[],int n,int e)
{
vertexnum=n;
arcnum=e;
for(int i=0;i<vertexnum;i++)
{
vertex[i]=a[i];
visited[i]=0;
}
for(int k=0;k<vertexnum;k++)
for(int j=0;j<arcnum;j++)
{
arc[k][j]=0;
}
for(int m=0;m<arcnum;m++)
{
int i,j;
cout<<"输入便的两个顶点:";
cin rel='nofollow' onclick='return false;'>>i>>j;
arc[i][j]=1;
arc[j][i]=1;
}
}
void algraph::DFSTraverse(int v)
{
cout<<vertex[v];
visited[v]=1;
for(int j=0;j<vertexnum;j++)
{
if(arc[v][j]==1 && visited[j]==0)
DFSTraverse(j);
}
}
void algraph::BFSTraverse(int v)
{
int front,rear;
front=rear=0;
int data[maxsize];
for(int k=0;k<vertexnum;k++)
{
visited[k]=0;
}
cout<<vertex[v];
visited[v]=1;
data[++rear]=v;
while(front!=rear)
{
int j;
j=data[++front];
for(int i=0;i<vertexnum;i++)
{
if(arc[j][i]==1 && visited[i]==0)
{
cout<<vertex[i];
visited[i]=1;
data[++rear]=i;
}
}
}
}