资源简介
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。
代码片段和文件信息
#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
- 上一篇:opnet14.5 经过测试可用
- 下一篇:分段式管理系统
评论
共有 条评论