采用邻接表创建无向图G ,依次输出各顶点的度。
函数接口定义:
void CreateUDG(ALGraph &G);
其中 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
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
采用scanf来进行读取的答案如下:
void CreateUDG(ALGraph &G)
{
int vex,arcn;//输入点的数量以及弧的个数
scanf("%d %d",&vex,&arcn);
G.vexnum=vex;
G.arcnum=arcn;
getchar();//把由scanf生成的回车读走,避免被当作字符
for(int i=0;i<vex;i++)
{
scanf("%c",&G.vertices[i].data);
G.vertices[i].firstarc=NULL;//初始化
}
getchar();//回收回车
char e1,e2;
for(int i=0;i<arcn;i++)
{
scanf("%c%c",&e1,&e2);
int x,y;
for(int j=0;j<vex;j++)
{
if(G.vertices[j].data==e1)
x=j;
if(G.vertices[j].data==e2)
y=j;
}
ArcNode *p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=y;
//头插法
p->nextarc=G.vertices[x].firstarc;
G.vertices[x].firstarc=p;
//由于是无向图,所以也要考虑另一个顶点
ArcNode *q = (ArcNode*)malloc(sizeof(ArcNode));
q->adjvex = x;
q->nextarc = G.vertices[y].firstarc;
G.vertices[y].firstarc = q;
getchar();//回收回车
}
}
欢迎大家指正@—@