主要代码:
/*
Name: 图的邻接矩阵存储结构
Copyright: BTC 2004
Author: Zhuang Bo
Date: 2004
Description:
*/
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
#include <stdio.h>
#include "ds.h"
///
//图的邻接矩阵表示
#define MAXQSIZE 100
#define QElemType int //队列元素
#define MAX_VERTEX_NUM 20 //最大顶点数
#define VexType char //顶点类型
#define ArcType int
#define INFINITY INT_MAX //无穷大
typedef struct {
VexType vexs[MAX_VERTEX_NUM]; //顶点向量
ArcType arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
int vexnum,arcnum; //顶点,边个数
} MGraph;
bool visited[MAX_VERTEX_NUM];
//循环队列类型定义
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
///
//图的基本操作声明
//输入顶点和弧的信息,建立图
Status CreateGraph(MGraph &G);
//销毁图的结构
Status DestroyGraph(MGraph &G);
//取顶点
VexType GetVex(MGraph G, int v);
//更新顶点信息
Status PutVex(MGraph &G, int v, VexType val);
//插入弧(v,w)
Status InsertArc(MGraph &G, int v, int w, ArcType arc);
//删除弧(v,w)
Status DeleteArc(MGraph &G, int v, int w);
//插入顶点v
Status InsertVex(MGraph &G, VexType val);
//删除顶点v
Status DeleteVex(MGraph &G, int v);
//图G中顶点v的第一个邻接点
int FirstAdjVex(MGraph G, int v);
//图G中顶点v在w之后的下一个邻接点
int NextAdjVex(MGraph G, int v, int w);
void DFS(MGraph G, int v);
//深度优先遍历图
void DFSTraverse(MGraph G, int v);
//广度优先遍历图
void BFSTraverse(MGraph G, int v);
//打印邻接矩阵(调试用)
void PrintAdjMatrix(MGraph G);
int locateVex(MGraph G, VexType v);
Status InitQueue(SqQueue &Q);
Status EnQueue(SqQueue &Q,QElemType e);