#include <stdio.h>
#include <stdlib.h>
#define INFINITY 9999
#define MaxVertexNum 100
typedef int WeightType;
typedef char DataType;
typedef struct GNode* PtrToGNode;
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
typedef int Vertex; //用顶点下标表示顶点,为整型
//用邻接矩阵表示图
struct GNode
{
int Nv; //顶点数
int Ne; //边数
WeightType G[MaxVertexNum][MaxVertexNum]; //邻接矩阵
DataType Data[MaxVertexNum]; //存顶点的数据,若顶点无数据,可以不用出现
};
//边的定义Edge是边的类型,边结构包括两个端点V1,V2,还有边的权重,Edge是指向这个结构的指针
typedef struct ENode* PtrToENode;
typedef int WeightType; //假设权重就是int
struct ENode
{
Vertex V1,V2; //有向边<V1,V2>
WeightType Weight; //权重
};
typedef PtrToENode Edge;
//初始化一个有VertexNum个顶点但没有变的图
MGraph CreateGraph(int VertexNum)
{
Vertex V,W;
MGraph Graph;
Graph = (MGraph)malloc(sizeof(struct GNode));
Graph->Nv = VertexNum;
Graph->Ne = 0;
//注意,默认顶点编号从0开始,到(Graph->Nv-1)
for(V=0;V < Graph->Nv;V++)
for(W=0;W < Graph->Nv;W++)
Graph->G[V][W] = INFINITY;
return Graph;
}
void InsertEdge(MGraph Graph,Edge E)
{
//插入边<V1,V2>
Graph->G[E->V1][E->V2] = E->Weight;
//若是无向图,还要插入<V2,V1>
Graph->G[E->V2][E->V1] = E->Weight;
}
MGraph BuildGraph()
{
MGraph Graph;
Edge E;
Vertex V; //用来输入顶点信息
int Nv,i;
scanf("%d",&Nv); //读入顶点个数
Graph = CreateGraph(Nv); //初始化有Nv个顶点但没有边的图
scanf("%d",&(Graph->Ne)); //读入边数
if(Graph->Ne!=0) //如果有边
{
E = (Edge)malloc(sizeof(struct ENode)); //建立边结点
//读入边,格式为起点,终点,权重,插入邻接矩阵
for(i=0;i < Graph->Ne;i++)
{
scanf("%d%d%d",&E->V1,E->V2,E->Weight);
//注意,如果权重不是整型,Weight的读入格式要改
InsertEdge(Graph,E);
}
}
//如果顶点有数据的话,读入数据
for(V=0;V < Graph->Nv;V++)
scanf("%c",&(Graph->Data[V]));
return Graph;
}
int main()
{
return 0;
}
#include <stdlib.h>
#define INFINITY 9999
#define MaxVertexNum 100
typedef int WeightType;
typedef char DataType;
typedef struct GNode* PtrToGNode;
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
typedef int Vertex; //用顶点下标表示顶点,为整型
//用邻接矩阵表示图
struct GNode
{
int Nv; //顶点数
int Ne; //边数
WeightType G[MaxVertexNum][MaxVertexNum]; //邻接矩阵
DataType Data[MaxVertexNum]; //存顶点的数据,若顶点无数据,可以不用出现
};
//边的定义Edge是边的类型,边结构包括两个端点V1,V2,还有边的权重,Edge是指向这个结构的指针
typedef struct ENode* PtrToENode;
typedef int WeightType; //假设权重就是int
struct ENode
{
Vertex V1,V2; //有向边<V1,V2>
WeightType Weight; //权重
};
typedef PtrToENode Edge;
//初始化一个有VertexNum个顶点但没有变的图
MGraph CreateGraph(int VertexNum)
{
Vertex V,W;
MGraph Graph;
Graph = (MGraph)malloc(sizeof(struct GNode));
Graph->Nv = VertexNum;
Graph->Ne = 0;
//注意,默认顶点编号从0开始,到(Graph->Nv-1)
for(V=0;V < Graph->Nv;V++)
for(W=0;W < Graph->Nv;W++)
Graph->G[V][W] = INFINITY;
return Graph;
}
void InsertEdge(MGraph Graph,Edge E)
{
//插入边<V1,V2>
Graph->G[E->V1][E->V2] = E->Weight;
//若是无向图,还要插入<V2,V1>
Graph->G[E->V2][E->V1] = E->Weight;
}
MGraph BuildGraph()
{
MGraph Graph;
Edge E;
Vertex V; //用来输入顶点信息
int Nv,i;
scanf("%d",&Nv); //读入顶点个数
Graph = CreateGraph(Nv); //初始化有Nv个顶点但没有边的图
scanf("%d",&(Graph->Ne)); //读入边数
if(Graph->Ne!=0) //如果有边
{
E = (Edge)malloc(sizeof(struct ENode)); //建立边结点
//读入边,格式为起点,终点,权重,插入邻接矩阵
for(i=0;i < Graph->Ne;i++)
{
scanf("%d%d%d",&E->V1,E->V2,E->Weight);
//注意,如果权重不是整型,Weight的读入格式要改
InsertEdge(Graph,E);
}
}
//如果顶点有数据的话,读入数据
for(V=0;V < Graph->Nv;V++)
scanf("%c",&(Graph->Data[V]));
return Graph;
}
int main()
{
return 0;
}