typedef struct GNode* PtrToGNode;
struct GNode
{
int Nv;
int Ne;
WeightType G[MaxVertexNum][MaxVertexNum];
DataType Data[MaxVertexNum];
};
typedef PtrToGNode MGraph;
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;
}
typedef struct ENode* PtrToENode;
struct Enode
{
Vertex V1; V2;
WeightType Weight;
};
typedef PtrToENode Edge;
void InsertEdge(MGraph Graph, Edge E)
{
Graph->G[E->V1][E->V2] = E->Weight;
Graph->G[E->V2][E->V1] = E->Weight;
}
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;
};
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;
}
void InsertEdge(LGraph Graph, Edge E)
{
PtrToAdjVNode NewNode;
NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->Adjv = E->V2;
NewNode->Weight = E->Weight;
NewNode->Next = Graph->G[E->V1].FirstEdge;
Graph->G[E->V1].FirstEdge = NewNode;
NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->Adjv = E->V1;
NewNode->Weight = E->Weight;
NewNode->Next = Graph->G[E->V2].FirstEdge;
Graph->G[E->V2].FirstEdge = NewNode;
}