邻接表创建无向图

采用邻接表创建无向图G ,依次输出各顶点的度。
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示。 依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE

代码实现如下:

#include<iostream>
using namespace std;
typedef int Status;
typedef char VerTexType;
#define MVNum 100   //最大顶点数
#define OK 1
typedef struct ArcNode{
	int adjvex;		//该边所指向的顶点的位置
	struct ArcNode *nextarc;		//	指向下一条边的指针
	
}ArcNode;
typedef struct VNode{  		//顶点的信息
	VerTexType data;
	ArcNode *firstarc;  		//指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum];  			//AdjList表示邻接表类型
typedef struct{   			//邻接表
	AdjList vertices;
	int vexnum,arcnum;				//图的当前顶点数和边数
}ALGraph;
Status LocateVex(ALGraph G,VerTexType x) 
//CreateUDG里面用到的查找函数
{
	for(int i=0;i<G.vexnum;i++)
     {
         if(G.vertices[i].data== x)
             return i;
     }
    return -1;
}
Status CreateUDG(ALGraph &G)
{	//采用邻接表表示法,创建无向图
	int i,j,k;
	char v1,v2;
	ArcNode *p1,*p2;
	cin>>G.vexnum>>G.arcnum;		//输入总的顶点数,总的边数
	for(i=0;i<G.vexnum;i++)		//输入各个点,构造表头结点表
	{
		cin>>G.vertices[i].data;		//输入顶点值
		G.vertices[i].firstarc=NULL;		//初始化表头结点的指针域为NULL
	}
	for(k=0;k<G.arcnum;++k)
	{
		cin>>v1>>v2;			//输入一条边依附的两个顶点
		i=LocateVex(G,v1);
		j=LocateVex(G,v2);
		p1=new ArcNode;		//生成一个新的结点*p1
		p1->adjvex=j;				//邻接点的序号为i
		p1->nextarc=G.vertices[i].firstarc;
		G.vertices[i].firstarc=p1;
		//将新的结点插入顶点v1的边表头部
		p2=new ArcNode;
		p2->adjvex=i;
		p2->nextarc=G.vertices[j].firstarc;
		G.vertices[j].firstarc=p2;
		//将新的结点*p2插入顶点vj的边表头部
	}
	return OK;
} 
void Printf(ALGraph G)			//打印函数,每个顶点关联的边数
{
	int cnt,i;
	ArcNode *p;
	for(i=0;i<G.vexnum;i++)
	{
		cnt=0;
		p=G.vertices[i].firstarc;
		while(p!=NULL)
		{
			cnt++;
			p=p->nextarc;
		}
		if(i==0)
		cout<<cnt;
		else
		cout<<" "<<cnt;
	}
}
int main()
{
	ALGraph G;
	CreateUDG (G);
	Printf(G);
    cout<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值