#define MAX_VERTEX_NUM 20 |
typedef struct ArcBox |
{ |
int tailvex,headvex; /*该弧的尾和头顶点的位置*/ |
struct ArcBox * hlink, tlink; |
/分别为弧头相同和弧尾相财的弧的链域*/ |
InfoType info; /*该弧相关信息的指针*/ |
} ArcBox; |
typedef struct VexNode |
{ |
VertexType vertex: |
ArcBox fisrin, firstout; /*分别指向该顶点第一条入弧和出弧*/ |
} VexNode; |
typedef struct |
{ |
VexNode xlist[MAX_VERTEX_NUM]; /*表头向量*/ |
int vexnum,arcnum; /*有向图的顶点数和弧数*/ |
} OLGraph; |
void CreateDG ( LOGraph **G ) |
/*采用十字链表表示,构造有向图G(G.kind=DG)*/ |
{ |
scanf ( & ( *G->brcnum ),& ( *G->arcnum ),&IncInfo ); /*IncInfo 为0 则各弧不含其实信息*/ |
for ( i=0; i<*G->vexnum; ++i ) /*构造表头向量*/ |
{ |
scanf ( & ( G->xlist[i].vertex ) ); /*输入顶点值*/ |
*G->xlist[i].firstin=NulL; |
*G->xlist[i].firstout =NULL; /*初始化指针*/ |
} |
for ( k=0; k<G.arcnum; ++k ) /*输入各弧并构造十字链表*/ |
{ |
scanf ( &v1,&v2 ); /*输入一条弧的始点和终点*/ |
i=LocateVex ( *G,v1 ); |
j=LocateVex ( *G,v2 ); /*确定v1 和v2 在G 中位置*/ |
p= ( ArcBox* ) malloc ( sizeof ( ArcBox ) ); /*假定有足够空间*/ |
*p={ i,j,*G->xlist[j].fistin,*G->xlist[i].firstout,NULL} /*对弧结点赋值*/ |
/*{tailvex,headvex,hlink,tlink,info}*/ |
*G->xlist[j].fisrtin=*G->xlist[i].firstout=p; /*完成在入弧和出弧链头的插入*/ |
if ( IncInfo ) Input ( p->info ); /*若弧含有相关信息,则输入*/ |
} |
} /*CreateDG*/ |