资源简介
能够用邻接矩阵实现有向无向图有向无向网的构建插入和删除等功能
代码片段和文件信息
#include “iostream.h“
#include
#include
#include /* malloc()等 */
#include /* INT_MAX等 */
#include /* EOF(=^Z或F6)NULL */
#include /* atoi() */
#include /* eof() */
#include /* floor()ceil()abs() */
#include /* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status; /* Status是函数的类型其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型其值是TRUE或FALSE */
#define MAX_NAME 5 /* 顶点字符串的最大长度+1 */
#define MAX_INFO 20 /* 相关信息字符串的最大长度+1 */
typedef int VRType;
typedef char InfoType;
typedef char VertexType[MAX_NAME];
/* 图的数组(邻接矩阵)存储表示 */
#define INFINITY INT_MAX /* 用整型最大值代替∞ */
#define MAX_VERTEX_NUM 20 /* 最大顶点个数 */
typedef enum{DGDNAGAN}GraphKind; /* {有向图有向网无向图无向网} */
typedef struct
{
int adj; /* 顶点关系类型。对无权图,用1(是)或0(否)表示相邻否; */
/* 对带权图,c则为权值类型 */
InfoType *info; /* 该弧相关信息的指针(可无) */
}ArcCellAdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vexs[MAX_VERTEX_NUM]; /* 顶点向量 */
AdjMatrix arcs; /* 邻接矩阵 */
int vexnumarcnum; /* 图的当前顶点数和弧数 */
GraphKind kind; /* 图的种类标志 */
}MGraph;
typedef int InfoType1; /* 存放网的权值 */
typedef char VertexType[MAX_NAME]; /* 字符串类型 */
/* 图的邻接表存储表示 */
#define MAX_VERTEX_NUM 20
typedef struct ArcNode
{
int adjvex; /* 该弧所指向的顶点的位置 */
struct ArcNode *nextarc; /* 指向下一条弧的指针 */
InfoType1 *info; /* 网的权值指针) */
}ArcNode; /* 表结点 */
typedef struct
{
VertexType data; /* 顶点信息 */
ArcNode *firstarc; /* 第一个表结点的地址指向第一条依附该顶点的弧的指针 */
}VNodeAdjList[MAX_VERTEX_NUM]; /* 头结点 */
typedef struct
{
AdjList vertices;
int vexnumarcnum; /* 图的当前顶点数和弧数 */
int kind; /* 图的种类标志 */
}ALGraph;
int LocateVex(MGraph GVertexType u)
{ /* 初始条件:图G存在u和G中顶点有相同特征 */
/* 操作结果:若G中存在顶点u则返回该顶点在图中位置;否则返回-1 */
int i;
for(i=0;i if(strcmp(uG.vexs[i])==0)
return i;
return -1;
}
Status CreateDG(MGraph *G)
{ /* 采用数组(邻接矩阵)表示法构造有向图G */
int ijklIncInfo;
char s[MAX_INFO]*info;
VertexType vavb;
printf(“请输入有向图G的顶点数:“);
scanf(“%d“&(*G).vexnum);
printf(“请输入有向图G的弧数 :“);
scanf(“%d“&(*G).arcnum);
printf(“弧是否含其它信息(是:1否:0): “);
scanf(“%d“&IncInfo);
printf(“请输入“);
printf(“%d“(*G).vexnum);
printf(“个顶点的值(<%d个字符):\n“MAX_NAME);
for(i=0;i<(*G).vexnum;++i) /* 构造顶点向量 */
scanf(“%s“(*G).vexs[i]);
for(i=0;i<(*G).vexnum;++i) /* 初始化邻接矩阵 */
for(j=0;j<(*G).vexnum;++j)
{
(*G).arcs[i][j].adj=0; /* 图 */
(*G).arcs[i][j].info=NULL;
}
printf(“请输入“);
printf(“%d“(*G).arcnum);
printf(“条弧的弧尾 弧头(以空格作为间隔): \n“);
for(k=0;k<(*G).arcnum;++k)
{
scanf(“%s%s%*c“vavb); /* %*c吃掉回车符 */
i=LocateVex(*Gva);
j=LocateVex(*Gvb);
(*G).arcs[i][j].adj=1; /* 有向图 */
if(IncInfo)
{
- 上一篇:解析S57海图数据代码
- 下一篇:C++程序基础课程设计——求取平均分&整数集合类
评论
共有 条评论