采用邻接表创建无向图G ,依次输出各顶点的度。
函数接口定义:
void CreateUDG(ALGraph &G);
#include <stdio.h>
#include <stdlib.h>
#define MVNum 100
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
int info;
}ArcNode;
typedef struct VNode{
char data;
ArcNode *firstarc;
}VNode, AdjList[MVNum];
typedef struct{
VNode vertices[MVNum];
int vexnum, arcnum;
}ALGraph;
void CreateUDG(ALGraph &G);
int main(){
ALGraph G;
int i , j,sum=0;
CreateUDG(G);
ArcNode * p;
for(i = 0 ; i < G.vexnum ; ++i){
sum=0;
p=G.vertices[i].firstarc;
for(; p!=NULL; p=p->nextarc){
sum+=1;
}
if(i==0)
printf("%d",sum);
else
printf(" %d",sum);
}
return 0;
}
/* 请在这里填写答案 */
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:
2 3 3 3 3
void CreateUDG(ALGraph &G){
scanf("%d %d",&G.vexnum,&G.arcnum);
getchar();
int i;
char c;
for(i=0;i<G.vexnum;i++){
scanf("%c",&c);
G.vertices[i].data=c;
G.vertices[i].firstarc=NULL;
}
getchar();
char vex1,vex2;
int vexnum1,vexnum2;
int j=0;
for(i=0;i<G.arcnum;i++){
scanf("%c%c",&vex1,&vex2);
getchar();
for(j=0;j<G.vexnum;j++){
if(G.vertices[j].data==vex1)vexnum1=j;
if(G.vertices[j].data==vex2)vexnum2=j;
}
ArcNode* p;
p=G.vertices[vexnum1].firstarc;
if(!p){
G.vertices[vexnum1].firstarc=(ArcNode*)malloc(sizeof(ArcNode));
G.vertices[vexnum1].firstarc->adjvex=vexnum2;
}else{
while(p->nextarc){
p=p->nextarc;
}
ArcNode* m=(ArcNode*)malloc(sizeof(ArcNode));
m->adjvex=vexnum2;
m->nextarc=NULL;
p->nextarc=m;
}
//ArcNode* p;
p=G.vertices[vexnum2].firstarc;
if(!p){
G.vertices[vexnum2].firstarc=(ArcNode*)malloc(sizeof(ArcNode));
G.vertices[vexnum2].firstarc->adjvex=vexnum1;
}else{
while(p->nextarc){
p=p->nextarc;
}
ArcNode* m=(ArcNode*)malloc(sizeof(ArcNode));
m->adjvex=vexnum1;
m->nextarc=NULL;
p->nextarc=m;
}
}
}