采用邻接表创建无向图G ,依次输出各顶点的度。
其中 G 是采用邻接表表示的无向图。
函数定义接口:
void CreateUDG(ALGraph &G);
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
裁判测试程序样例:
#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;
}
/* 请在这里填写答案 */
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:
2 3 3 3 3
解决函数:
void CreateUDG(ALGraph &G)
{
int v,e;
int i,j;
scanf("%d%d\n",&v,&e); //输入顶点数和边数
G.vexnum =v;
G.arcnum =e;
for(i=0;i<G.vexnum ;i++)
{
scanf("%c",&G.vertices [i].data );//顶点赋值(ABCDE)
G.vertices [i].firstarc =NULL; //一开始都没有邻接点
}
getchar();
char e1,e2; //定义边
for(i=0;i<G.arcnum ;i++)
{
scanf("%c%c\n",&e1,&e2);//输入边
for(j=0;j<G.vexnum ;j++)
{
if(e1==G.vertices[j].data || e2==G.vertices[j].data )//因为是无向图所以互相之间都要连接
{
ArcNode* temp=(ArcNode*)malloc(sizeof(ArcNode));//开一个边节点的空间
temp->nextarc =NULL;
temp->nextarc =G.vertices [j].firstarc ;//边节点插入
G.vertices [j].firstarc =temp; //边节点插入
}
}
}
}