6-2 采用邻接表创建无向图 (20分)
采用邻接表创建无向图G ,依次输出各顶点的度。
函数接口定义:
void CreateUDG(ALGraph &G);
其中 G 是采用邻接表表示的无向图。
裁判测试程序样例:
#include <>
#include <>
#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
答案样例
#include <bits/stdc++.h>//创作不易,点个赞吧,新春快乐~
using namespace std;
void CreateUDG(ALGraph &G){
int x, y;
char c1, c2;
cin >> G.vexnum >> G.arcnum;
for(int i=0; i<G.vexnum; i++){
cin >> G.vertices[i].data;
G.vertices[i].firstarc=NULL;//初始化
}
for(int i=0; i<G.arcnum; i++){
cin >> c1 >> c2;
for(int j=0; j<G.vexnum; j++){
if(G.vertices[j].data==c1)
x = j;
if(G.vertices[j].data==c2)
y = j;
}
//头插法
ArcNode* p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = y;
p->nextarc = G.vertices[x].firstarc;
G.vertices[x].firstarc = p;
//因为是无向图,所以要别忘了另一条鞭
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = x;
p->nextarc = G.vertices[y].firstarc;
G.vertices[y].firstarc = p;
}
}
感谢你的点赞❤⭐
哔哩哔哩/bilibili:羊卓的杨
公众号:羊卓的杨