函数题-图基本概念和存储-采用邻接表创建无向图

采用邻接表创建无向图G ,依次输出各顶点的度。
其中 G 是采用邻接表表示的无向图。

函数定义接口:

void CreateUDG(ALGraph &G);

输入格式:
输入第一行中给出2个整数i(0 输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。

输出格式:
依次输出各顶点的度,行末没有最后的空格。

裁判测试程序样例:

#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;
}

/* 请在这里填写答案 */

输入样例:

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;           //边节点插入
        }
    }
}
}

你可能感兴趣的:(创建无向图)