-
/*
*/
#include
#include
//
图的邻接表存储表示
#define MAX_NAME 3
//
顶点字符串的最大长度
+1
//
存放网的权值
#define
MAX_VERTEX_NUM 20
typedef int InfoType;
数据结构
C
语言版
求关节点
P176
编译环境:
Dev-C++ 4.9.9.2
日期:
2011
年
2
月
15
日
typedef char VertexType[MAX_NAME];
//
字符串类型
typedef enum{DG,DN,AG,AN}GraphKind; //
{
有向图
,
有向网
,
无向图
,
无向网
}
typedef struct
ArcNode
{
int adjvex;
struct ArcNode *nextarc;
//
该弧所指向的顶点的位置
//
指向下一条弧的指针
//
网的权值指针)
InfoType *info;
}ArcNode;
//
表结点
typedef struct VNode
{
VertexType data;
//
顶点信息
ArcNode *firstarc;
//
第一个表结点的地址
,
指向第一条依附该顶点的弧的
指针
}VNode,AdjList[MAX_VERTEX_NUM];//
头结点
typedef struct
{
AdjList vertices;
//
若
G
中存在顶点
u,
则返回该顶点在图中位置
;
否则
返回
-1
。
int LocateVex(ALGraph G,VertexType u)
{
int i;
for(i=0;i<;++i)
int vexnum,arcnum;
//
图的当前顶点数和弧数
int
kind;
//
图的种类标志
}ALGraph;
if(strcmp(u,es[i].data)==0)
return i;
return -1;
}
//
采用邻接表存储结构
,
构造没有相关信息的图
G(
< br>用一个函数构造
4
种图
)
。
int
CreateGraph(ALGraph *G)
{
int i,j,k;
int w;
ArcNode *p;
prin
tf(
请输入图的类型
(
有向图
:0,
有向网
:1,
无向图
:2,
无向网
:3):
scanf(
printf(
请输入图的顶点
数和边数
:
(空格)
n
scanf(
printf(
请输入
< br>%d
个顶点的值
(<%d
个字符
):n
for(i = 0; i <
(*G).vexnum; ++i)
//
构造顶点向量
{
scanf(
//
权值
VertexType
va,vb;
(*G).vertices[i].firstarc = NULL;
}
if((*G).kind == 1 ||
(*G).kind == 3) //
网
printf(
请顺序输入每条弧<
/p>
(
边
)
的权值、
弧尾和弧头
(
以空格作为间隔
):n<
/p>
else //
图
printf(
请顺序输入每条弧<
/p>
(
边
)
的弧尾和
弧头
(
以空格作为间隔
):n
for(k = 0;k < (*G).arcnum; ++k) //
构造表结点链表
{
if((*G).kind==1||(*G).kind==3) //
网
scanf(
else
//
图
scanf(
i = LocateVex(*G,va);
//
弧尾
j =
LocateVex(*G,vb); //
弧头
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = j;
if((*G).kind
== 1 || (*G).kind == 3) //
网
{
p->info = (int *)malloc(sizeof(int));
*(p->info) = w;
}
else
p->info =
NULL; //
图
-
-
-
-
-
-
-
-
-
上一篇:图的基本操作与实现的课程设计报告
下一篇:matlab如何画五星红旗