#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 ;
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];
}*/
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);
{
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;
}
{
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;
}