实验 6:图的实验

邻接矩阵

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值