邻接矩阵
#include<iostream.h>
const intMaxSize=10;
intvisited[MaxSize]={0};
class MGraph
{
public:
MGraph(chara[],int n,int e);
~MGraph(){}
voidDFSTraverse(int v);
voidBFSTraverse(int v);
void Print(char a[],int v,int length);
private:
char vertex[MaxSize];
intarc[MaxSize][MaxSize];
intvertexNum,arcNum;
};
MGraph::MGraph(chara[],int n,int e)
{
int i,j,k;
vertexNum=n;
arcNum=e;
for(i=0;i<vertexNum;i++)
vertex[i]=a[i];
for(i=0;i<vertexNum;i++)
for(j=0;j<vertexNum;j++)
arc[i][j]=0;
for(k=0;k<arcNum;k++)
{
cout<<"输入边的两个顶点序号:"<<endl;
cin>>i>>j;
arc[i][j]=1;arc[j][i]=1;
}
}
voidMGraph::DFSTraverse(int v)
{
cout<<vertex[v];
visited[v]=1;
for(intj=0;j<vertexNum;j++)
if(arc[v][j]==1&&visited[j]==0)
DFSTraverse(j);
}
voidMGraph::BFSTraverse(int v)
{
int Q[MaxSize];
intfront=-1,rear=-1;
cout<<vertex[v];
visited[v]=1;
Q[++rear]=v;
while(front!=rear)
{
v=Q[++front];
for(intj=0;j<vertexNum;j++)
if(arc[v][j]==1&&visited[j]==0)
{
cout<<vertex[j];
visited[j]=1;
Q[++rear]=j;
}
}
}
voidMGraph::Print(char a[],int v,int length)
{
for(inti=0;i<length;i++)
{
cout<<a[i]<<"顶点的邻接点为:";
for(intj=0;j<length;j++)
{
if(arc[i][j]==1)
cout<<a[j];
}
cout<<endl;
}
}
int main()
{
charch[]={'A','B','C','D','E','F'};
MGraphMG(ch,6,7);
for(inti=0;i<MaxSize;i++)
visited[i]=0;
cout<<"深度优先遍历:";
MG.DFSTraverse(0);
cout<<endl;
for(i=0;i<MaxSize;i++)
visited[i]=0;
cout<<"广度优先遍历:";
MG.BFSTraverse(0);
cout<<endl;
MG.Print(ch,0,6);
cout<<endl;
return 0;
}
邻接表
#include<iostream.h>
const int MaxSize=10;
int visited[MaxSize]={0};
struct ArcNode
{
intadjvex;
ArcNode*next;
};
struct VertexNode
{
charvertex;
ArcNode*firstedge;
};
class ALGraph
{
public:
ALGraph(chara[],int n,int e);
~ALGraph();
voidDFSTraverse(int v);
voidBFSTraverse(int v);
voidPrint(char a [],int length);
private:
VertexNodeadjlist[MaxSize];
intvertexNum,arcNum;
};
ALGraph::ALGraph(char a[],int n,int e)
{
ArcNode*s;
inti,j,k;
vertexNum=n;
arcNum=e;
for(i=0;i<vertexNum;i++)
{
adjlist[i].vertex=a[i];
adjlist[i].firstedge=NULL;
}
for(k=0;k<arcNum;k++)
{
cout<<"请输入边的两个顶点的序号:"<<endl;
cin>>i>>j;
s=newArcNode;
s->adjvex=j;
s->next=adjlist[i].firstedge;
adjlist[i].firstedge=s;
}
}
ALGraph::~ALGraph()
{
ArcNode*p=NULL;
for(inti=0;i<vertexNum;i++)
{
p=adjlist[i].firstedge;
while(p!=NULL)
{
adjlist[i].firstedge=p->next;
deletep;
p=adjlist[i].firstedge;
}
}
}
void ALGraph::DFSTraverse(int v)
{
ArcNode*p=NULL;
intj;
cout<<adjlist[v].vertex;
visited[v]=1;
p=adjlist[v].firstedge;
while(p!=NULL)
{
j=p->adjvex;
if(visited[j]==0)DFSTraverse(j);
p=p->next;
}
}
void ALGraph::BFSTraverse(int v)
{
intQ[MaxSize];
intfront=-1,rear=-1;
ArcNode*p=NULL;
cout<<adjlist[v].vertex;
visited[v]=1;
Q[++rear]=v;
while(front!=rear)
{
v=Q[++front];
p=adjlist[v].firstedge;
while(p!=NULL)
{
intj=p->adjvex;
if(visited[j]==0)
{
cout<<adjlist[j].vertex;
visited[j]=1;
Q[++rear]=j;
}
p=p->next;
}
}
}
void ALGraph::Print(char a[],intlength)
{
for(inti=0;i<length;i++)
{
cout<<a[i]<<"->";
if(adjlist[i].firstedge!=NULL)
cout<<a[adjlist[i].firstedge->adjvex];
elsebreak;
cout<<endl;
}
}
int main()
{
charch[]={'A','B','C','D','E'};
ALGraphALG(ch,5,7);
for(inti=0;i<MaxSize;i++)
visited[i]=0;
cout<<"深度优先遍历序列是:";
ALG.DFSTraverse(0);
cout<<endl;
for(i=0;i<MaxSize;i++)
visited[i]=0;
cout<<"广度优先遍历序列是:";
ALG.BFSTraverse(0);
cout<<endl;
ALG.Print(ch,5);
cout<<endl;
return0;
}