#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_VERTEX_NUM 20
typedef int Status;
typedef int VertexType;
typedef char InfoType;
typedef struct ArcBox
{
int tailvex,headvex;
struct ArcBox *hlink,*tlink;
InfoType *info;
}ArcBox;
typedef struct VexNode
{
VertexType data;
ArcBox *firstin,*firstout;
}VexNode;
typedef struct
{
VexNode xlist[MAX_VERTEX_NUM];
int vexnum,arcnum;
}OLGraph;
Status CreateDG(OLGraph *G);
Status CreateDG(OLGraph *G)
{
printf("\n构造有向图\n");
int i,j,k;
VertexType v1,v2;
printf("请输入顶点个数:");
scanf("%d",&(*G).vexnum);
printf("请输入弧个数:");
scanf("%d",&(*G).arcnum);
int IncInfo = 0;
for(i = 0;i<(*G).vexnum;i++){
printf("请输入G.xlist[%d].data = ",i);
scanf("%d",&(*G).xlist[i].data);
(*G).xlist[i].firstin = NULL;
(*G).xlist[i].firstout = NULL;
}
for(k = 0;k<(*G).arcnum;k++){
printf("请输入弧头(初始点):");
scanf("%d",&v1);
printf("请输入弧尾(终端点):");
scanf("%d",&v2);
i = LocateVex(*G,v1);
j = LocateVex(*G,v2);
ArcBox *p;
p = (ArcBox *)malloc(sizeof(ArcBox));
p->tailvex = i;
p->headvex = j;
p->hlink = (*G).xlist[j].firstin;
p->tlink = (*G).xlist[i].firstout;
p->info = NULL;
(*G).xlist[j].firstin = (*G).xlist[i].firstout = p;
}
}
int LocateVex(OLGraph G,VertexType v)
{
int ct;
for(ct = 0;ct < G.vexnum;ct++)
if(G.xlist[ct].data == v)
return ct;
return -1;
}
int main()
{
printf("构造P465 图7.11 的有向图。\n");
OLGraph G;
CreateDG(&G);
}