图的创建

typedef struct GNode* PtrToGNode;
struct GNode
{
 int Nv;//顶点数
 int Ne;//边数
 WeightType G[MaxVertexNum][MaxVertexNum];
 DataType Data[MaxVertexNum];//存顶点的数据
};
typedef PtrToGNode MGraph;
//MGraph初始化
//初始化一个有VertexNum个顶点但没有边的图
typedef int Vertex;
MGraph CreateGraph(int VertexNum)
{
 Vertex V, W;
 MGraph Graph;
 Graph = (MGraph)malloc(sizeof(struct GNode));
 Graph->Nv = VertexNum;
 Graph->Ne = 0;
 for (V = 0; V < Graph->Nv; V++)
  for (W = 0; W < Graph->Nv; W++)
   Graph->G[V][W] = 0;
 return Graph;
}
//向MGraph中插入边
typedef struct ENode* PtrToENode;
struct Enode
{
 Vertex V1; V2;//有向边<v1,v2>
 WeightType Weight;//权重
};
typedef PtrToENode Edge;
void InsertEdge(MGraph Graph, Edge E)
{
 Graph->G[E->V1][E->V2] = E->Weight;//插入边<V1,V2>
 //若是无向图,还要插入边<V2,V1>
 Graph->G[E->V2][E->V1] = E->Weight;
}
//完整地建立一个MGraph
int G[MAXN][MAXN], Nv, Ne;
void BuileGraph()
{
 int i, j, v1, v2, w;
 scanf("%d", &Nv);
 for (i = 0; i < Nv; i++)
  for (j = 0; j < Nv; j++)
   G[i][j] = 0;
 scanf("%d", &Ne);
 for (i = 0; i < Ne; i++)
  scanf("%d %d %d", &v1, &v2, &w);
 G[v1][v2] = w;
 G[v2][v1] = w;
}
//用邻接表表示图
typedef struct GNode* PtrToGNode;
struct GNode
{
 int Nv;//顶点数
 int Ne;//边数
 AdjList G;//邻接表
};
typedef PtrToGNode LGraph;//以邻接表方式存储的图类型
typedef struct Vnode {
 PtrToAdjVNode FirstEdge;
 DataType Data;//存顶点的数据
}AdjList[MaxVertexNum];
typedef struct AdjVNode* PtrToAdjVNode;
struct AdjVNode
{
 Vertex Adjv;//邻接点下标
 WeightType Weight;
 PtrToAdjVNode Next;
};
//LGraph初始化
//初始化一个有VertexNum个顶点但没有边的图
typedef int Vertex;
LGraph CreateGraph(int VertexNum)
{
 Vertex V, W;
 LGraph Graph;
 Graph = (LGraph)malloc(sizeof(struct GNode));
 Graph->Nv = VertexNum;
 Graph->Ne = 0;
 for (V = 0; V < Graph->Nv; V++)
  Graph->G[V].FirstEdge = NULL;
 return Graph;
}
//向LGraph中插入边
void InsertEdge(LGraph Graph, Edge E)
{//插入边V1,V2
 PtrToAdjVNode NewNode;
 NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
 //为V2建立新的邻接点
 NewNode->Adjv = E->V2;
 NewNode->Weight = E->Weight;
 //将V2插入V1的表头
 NewNode->Next = Graph->G[E->V1].FirstEdge;
 Graph->G[E->V1].FirstEdge = NewNode;
 //若是无向图,还要插入边<V2,V1>
 //为V1建立新的邻接点
 NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
 NewNode->Adjv = E->V1;
 NewNode->Weight = E->Weight;
 //将V1插入V2的表头
 NewNode->Next = Graph->G[E->V2].FirstEdge;
 Graph->G[E->V2].FirstEdge = NewNode;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值