//图的数组表示法
#define INFINITY INT_MAX //权值最大值
#define MAX_VERTEX_NUM 20 //最大顶点数
typedef enum {DG, DN, UDG, UDN};//{有向图,有向网,无向图,无向网}
typedef struct ArcCell{//弧结点结构
VRType adj; //权值,无权图用1/0表示是否相邻
InfoType *info;//本弧带的信息
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
VertexType vex[MAX_VERTEX_NUM];//顶点向量,其实就是所有顶点的数组
AdjMatrix arcs;//邻接矩阵
int vexnum, arcnum; //图的顶点数和弧数
GraphKind kind;//图的类型
}MGraph;
//创建一个图
Status CreateGraph(MGraph &G)
{
scanf(& G.kind);
switch(G.kind)
{
case DG: return CreateDG(G);
case UDG: return CreateUDG(G);
case DN: return CreateDN(G);
case UDN: return CreateUDN(G);
default: return ERROR;
}
}
//创建一个无向网
Status CreateUDN(MGraph &G)
{
int v1, v2, w, i, j ,k;
scanf(&G.vexnum, &G.arcnum, &incinfo);//确定图的顶点数,弧数,有信息否
for(v=0;v<G.vexnum;v++)//构建邻接表
for(j=0;j<G.vexnum;j++)
G.arcs[v][j] = {INFINITY, NULL};
for(k=0;k<G.arcnum;k++){
scanf(&v1, &v2, &w);//输入一条边的顶点和权值
i = LocateVex(G, v1);
j = LocateVex(G, v2);
G.arcs[i][j].adj = w;
if(incinfo)
scanf(&G.arcs[i][j].info);
G.arcs[j][i] = G.arcs[i][j];
}
return ok;
}