• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签:

资源简介

以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。

资源截图

代码片段和文件信息

#include
#define exit 0 ;
#define MAX_VERTEX_NUM 20
typedef int InfoType  ;
typedef struct ArcNode {                         //表结点
  int       adjvex;                              // 该弧所指向的顶点的位置
  struct ArcNode *nextarc;                       // 指向下一条弧指针
  InfoType  info;                                // 该弧相关信息的指针
} ArcNode;
typedef char VertexType ;
typedef struct VNode {                           //头结点
 VertexType  data;                               // 顶点信息
  ArcNode  *firstarc;                            // 指向第一条依附该顶点的弧
  } VNode AdjList[MAX_VERTEX_NUM];
typedef struct { 
    AdjList  vertices;
    int  vexnumarcnum;                          //图的当前顶点数和弧数
}ALGraph;
typedef struct QNode{
    VertexType  data;
      struct QNode *next;
     } QNode*QueuePtr;
typedef struct{
         QueuePtr front;
         QueuePtr rear;
    }linkQueue; 
 void InitQueue(linkQueue  &Q)
          {
             Q.front=Q.rear=new QNode;
             if(!Q.front) exit(1);
             Q.front->next=NULL;
           }
void EnQueue(linkQueue &QVertexType e)
{                                               // 在当前队列的尾元素之后,插入元素 e 为新的 队列尾元素
QNode *p;
p=new QNode;
if(!p)exit(1);                                  // 存储分配失败
p->data=e;
p->next=NULL;
Q.rear->next=p;                                 // 修改尾结点的指针
Q.rear=p;                                       // 移动队尾指针 
}
void DeQueue(linkQueue &QVertexType &e)        // 若队列不空,则删除当前队列 Q 中的头元素,用 e 返回其值,
                                                //并返回 TRUE;否则返回 FALSE 
{
if(Q.front==Q.rear)exit(1);                     // 链队列中只有一个头结点
QNode *p;
p=Q.front->next;
e=p->data;                                      // 返回被删元素
Q.front->next=p->next;                          // 修改头结点指针
if(Q.rear==p)Q.rear=Q.front;
delete p;                                       // 释放被删结点
}    
void CreateGraph (ALGraph &G) {
int headtail;
InfoType weight;
cout<<“输入顶点数和边数“<    cin >> G.vexnum >> G.arcnum;                //输入顶点数和边数
cout<<“输入各顶点的信息“<    for ( int i = 0; i < G.vexnum; i++) { 
//cout<<“输入顶点“<        cin >> G. vertices[i].data;             //输入顶点信息
        G. ve

评论

共有 条评论

相关资源