信管117116李可欣数据结构实验六

#ifndef MGraph_H

#define MGraph_H

const intMaxSize=10;

 

template<classDataType>

class MGraph

{

      public:

           MGraph(DataType a[],int n,int e);

           ~MGraph(){}

           void DFSTraverse(int v);

           void BFSTraverse(int v);

      private:

           DataType vertex[MaxSize];

           int arc[MaxSize][MaxSize];

           int vertexNum,arcNum;

};

#endif

 

 

#include<iostream>

using namespacestd;

#include"MGraph.h"

 

tempalte<classDataType>

MGraph<DataType>::MGraph(DataTypea[],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<<"请输入边的两个顶点的序号:";

                 cin>>i>>j;

                 arc[i][j]=1;arc[j][i]=1;

           }

}

 

template<classDataType>

voidMGraph<DataType>::DFSTraverse(int v)

{

      cout<<vertex[v];visited[v]=1;

      for(int j=0;j<vertexNum;j++)

           if(arc[v][j]==1&&visited[j]==0)

                 DESTraverse(j);

}

 

template<classDataType>

voidMGragh<DataType>::BFSTraverse(int v)

{

      int Q[MGraph];

      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(arc[v][j]==1&&visited[j]==0){

                      cout<<vertex[j];visited[j]=1;Q[++rear]=j;

                 }

      }

}

 

 

#include<iostream>

using namespacestd;

#include"MGraph.cpp"

intvisited[MaxSize]={0};

 

int main()

{

      char ch[]={'A','B','C','D','E'};

      MGraph<char>MG(ch,5,6);

      for(int i=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;

      return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值