#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<cstring>
const int MaxSize=100;
const int VERTEXNUM=20;
typedef struct{
int *Qbase;
int front,rear;
}SqQueue;
void InitQueue(SqQueue &Q){
Q.Qbase = (int *)malloc(sizeof(int) *VERTEXNUM);
if(!Q.Qbase)
return ;
Q.rear = Q.front = -1;
}
void EnQueue(SqQueue &Q, int i){
Q.Qbase[Q.rear ++] = i;
}
void DeQueue(SqQueue &Q, int &i){
i = Q.Qbase[Q.front ++];
}
int QueueEmpty(SqQueue Q){
if(Q.front == Q.rear)
return 1;
return 0;
}
template<class T>
class MGraph
{
public:
MGraph(T a[],int n,int e);
~MGraph(){}
void DFSTraverse();
void BFSTraverse(int v);
void DeepTra(int v[],int n);
private:
T vertex[MaxSize]; //节点数组
int arc[MaxSize][MaxSize]; //矩阵
int vertexNum,arcNum; //节点数与边数
int visited[MaxSize]; //访问记录
};
template<class T>
MGraph<T>::MGraph(T a[],int n,int e)
{
int i,j;
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(int k=0;k<arcNum;k++)
{
std::cout<<"输入第"<<k+1<<"条边:"<<std::endl;
std::cin>>i>>j;
arc[i][j]=1;
arc[j][i]=1;
}
}
template<class T>
void MGraph<T>::DFSTraverse()
{
int i;
for(i=0;i<vertexNum;i++)
{
visited[i]=0;
}
std::cout<<"深度优先遍历:"<<std::endl;
for(i=0;i<vertexNum;i++)
{
if(visited[i]==0)
DeepTra(visited,0);
}
}
template<class T>
void MGraph<T>::DeepTra(int v[],int n)
{
int i;
visited[n]=1;
std::cout<<vertex[n];
for(i=0;i<vertexNum;i++)
{
if(arc[n][i]!=0&&visited[i]==0)
{
DeepTra(visited,i);
}
}
}
template<class T>
void MGraph<T>::BFSTraverse(int v)
{
SqQueue Q;
Q.front=Q.rear=-1;
int i;
for(i=0;i<vertexNum;i++)
{
visited[i]=0;
}
std::cout<<std::endl;
std::cout<<"广度优先遍历:"<<std::endl;
std::cout<<vertex[v];
visited[v]=1;
InitQueue(Q);
EnQueue(Q,v);
while(!QueueEmpty(Q))
{
DeQueue(Q,v);
for(int i=0;i<vertexNum;i++)
if(arc[v][i]==1&&visited[i]==0)
{
std::cout<<vertex[i];
visited[i]=1;
EnQueue(Q,i);
}
}
}
int main()
{
int e,n;
std::cout<<"点的个数:"<<" ";
std::cin>>e;
std::cout<<"边的个数:"<<" ";
std::cin>>n;
char s[e];
for(int i=0;i<e;i++)
{
std::cout<<"输入第"<<i+1<<"个点:";
std::cin>>s[i];
}
MGraph<char> m(s,e,n);
m.DFSTraverse();
m.BFSTraverse(0);
return 0;
}
图的遍历(C++)
最新推荐文章于 2024-12-10 18:28:54 发布