typedef char VertexType[MAXNAME]; typedef struct ArcNode{ int adjvex;
struct ArcNode *nextarc; }ArcNode;
typedef struct VNode{ VertexType data; ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM]; typedef struct{ AdjList vertices; int vexnum,arcnum; int kind; }ALGraph; ALGraph G;
Boolean visited[MAX]; int degree[MAX_VERTEX_NUM];
int LocateVex(ALGraph G,VertexType v) {
int i,n;
for(n=0;n if(strcmp(v,G.vertices[n].data)==0) i=n; } return i; } ALGraph Create(ALGraph G) { int i,j,k;VertexType v1,v2;ArcNode *p; printf(\请输入要构造的图的顶点数和弧数:\\n\ scanf(\ printf(\请输入每一个顶点的名字:\\n\ for(i=0;i scanf(\ G.vertices[i].firstarc=NULL; } printf(\各顶点的位置以及名称为:\\n\ for(i=0;i printf(\ printf(\请输入要构造的是无向图还是有向图:无向用0表示,有向用1表示:\\n\ scanf(\ for(i=0;i printf(\请输入每条弧的始点和终点:\\n\ if(G.kind==1) { for(k=0;k scanf(\ i=LocateVex(G,v1);j=LocateVex(G,v2); p=(ArcNode *)malloc(sizeof(ArcNode)); p->adjvex=j; p->nextarc=G.vertices[i].firstarc; G.vertices[i].firstarc=p; degree[i]++; } } if(G.kind==0) { for(k=0;k scanf(\ i=LocateVex(G,v1);j=LocateVex(G,v2); p=(ArcNode *)malloc(sizeof(ArcNode)); p->adjvex=j; p->nextarc=G.vertices[i].firstarc; G.vertices[i].firstarc=p; degree[i]++; p=(ArcNode *)malloc(sizeof(ArcNode)); p->adjvex=i; p->nextarc=G.vertices[j].firstarc; G.vertices[j].firstarc=p; degree[j]++; } } return G; } void print(ALGraph G) { int i; ArcNode *p; for(i=0;i printf(\ for(p=G.vertices[i].firstarc;p;p=p->nextarc) printf(\ printf(\ if(G.kind==1) printf(\出度为:m\\n\ if(G.kind==0) printf(\总度数为:m\\n\ } } int FirstAdjVex(ALGraph G,int v) { ArcNode *p; p=G.vertices[v].firstarc; if(p) return(p->adjvex); else return -1; } int NextAdjVex(ALGraph G,int v,int w) { ArcNode *p;int i;