图的邻接矩阵

#include<iostream>
using namespace std;
const int Max=10;
typedef struct
{
 int data[Max];
 int front,rear;
}Queue;
/*class LinkQueue
{
public:
 LinkQueue(Queue *Q);
 ~LinkQueue();
 void EnQueue(Queue *Q,int e);
 int DeQueue(Queue *Q,int *e);
 int GetQueue();
private:
 Node *front,*rear;
};*/
void LinkQueue(Queue *Q)
{
 Q->front=Q->rear=0;
}
void EnQueue(Queue *Q,int e)
{
 if((Q->rear+1)%Max==Q->front)
  return ;
 Q->data[Q->rear]=e;
 Q->rear=(Q->rear+1)%Max;
}
void DeQueue(Queue *Q,int *e)
{
 if(Q->front==Q->rear)return ;
 *e=Q->data[Q->front];
 Q->front=(Q->front+1)%Max;
}
 QueueEmpty(Queue *Q)
{
 if(Q->front==Q->rear)
  return 1;
 else
  return 0;
}
/*GetQueue()
{
 if(rear==front)throw"duo yu ";
 i=(front+1)%Max;
 return data[i];
}*/

class MGraph        //tu
{
public:
 MGraph(int a[],int n,int e);
 ~MGraph(){cout<<"des"<<endl;}
 void DFSTraverse(MGraph a);    //shen du you xian
 void DFS(MGraph a,int i);   
 void BFSTraverse(MGraph a);
private:
 int vertex[Max];
 int arc[Max][Max];
 int vertexNum,arcNum;
 int visit[Max];
};
MGraph::MGraph(int a[],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;j++)
  for(j=0;j<vertexNum;j++)
   arc[i][j]=0;
 for(k=0;k<vertexNum;k++)
 {
  cin>>i>>j;
  arc[i][j]=1;arc[j][i]=1;
 }
};
void MGraph::DFS(MGraph a,int i)
{
 int j;
 visit[i]=1;
 cout<<"第i点为:";
 cout<<a.vertex[i]<<endl;
 visit[i]=1;
 for(j=0;j<vertexNum;j++)
  if(arc[i][j]==1&&visit[j]==0)DFS(a,j);
}
void MGraph::DFSTraverse(MGraph a)
{
 int i;
 for(i=0;i<a.vertexNum;i++)
  visit[i]=0;
 for(i=0;i<a.vertexNum;i++)
 {
  if(!visit[i])
   DFS(a,i);
 }
}
void MGraph::BFSTraverse(MGraph a)
{
 int i,j;
 Queue Q;
 for(i=0;i<a.vertexNum;++i)
  visit[i]=0;
 LinkQueue(&Q);
 for(i=0;i<a.vertexNum;++i)
 {
  if(!visit[i])
  {
   visit[i]=1;
   printf("%c",a.vertex[i]);
   EnQueue(&Q,i);
   while(!QueueEmpty(&Q))
   {
    DeQueue(&Q,&i);
    for(j=0;j<a.vertexNum;++j)
    {
     if(!visit[j]&&a.arc[i][j]!=10000)
     {
      visit[j]=1;
      cout<<a.vertex[j]<<endl;
      EnQueue(&Q,j);
     }
    }
   }
  }
 }
}
/**********************************************************************************/
int main()
{
 int b[7]={1,2,3,4,5,6,7};
 MGraph a(b,7,6);
 cout<<"图的深度遍历\n"<<endl;
 a.DFSTraverse(a);
 cout<<"图的广度遍历\n"<<endl;
 a.BFSTraverse(a);
 cout<<endl;
 return 0;
}

猜你喜欢

转载自blog.csdn.net/joan_of_arc_alter/article/details/80556740