【图 代码练习 】

图代码

结构体

//邻接矩阵
#define maxsize 50
typedef struct {
	int vex[maxsize];
	int edg[maxsize][maxsize];
	int numvex, numedg;
}Mgraph;
//邻接表
typedef struct ArcNode {
	int adjvex;
	struct ArcNode* nextarc;
}ArcNode,*Node;
typedef struct {
	int data;
	ArcNode* firstarc;
}VNode;
typedef struct {
	VNode adjlist[maxsize];
	int numvex, numedg;
}AGraph;

4. 邻接表 求各个顶点的出度

void outDegree(AGraph g) {
	int num = 0;
	ArcNode* arc;
	for (int i = 0; i < g.numvex; i++) {
		num = 0;
		arc = g.adjlist[i].firstarc;
		while (arc != NULL) {
			num++;
			arc = arc->nextarc;
		}
		cout <<"顶点" <<i <<"的出度为:" << num << endl;
	}
}

5. 邻接表 求各个顶点的入度

void inDegree(AGraph g) {
	ArcNode* p;
	 int a[g.numvex];
	 for (int i = 0; i < g.numvex; i++) {
		 p = g.adjlist[i].firstarc;
		 while (p != NULL) {
			 a[p->adjvex]++;
			 p = p->nextarc;
		 }
	 }
}

8.邻接矩阵转邻接表

void Convert1(Mgraph  g, AGraph* G) {
	G->numedg = g.numedg;
	G->numvex = g.numvex;
	for (int i = 0; i < g.numvex; i++) {
		G->adjlist[i].firstarc = NULL;
	}
	for (int i = 0; i < g.numvex; i++) {
	    for (int  j = 0; j < g.numvex; j++)
		{
			if (g.edg[i][j] != 0) {
				ArcNode* p = new ArcNode;
				p->adjvex = j;
				p->nextarc = G->adjlist[i].firstarc;
				G->adjlist[i].firstarc = p;

			}
		}
	}
}

9. 邻接表 邻接表转邻接矩阵

void  Convert(AGraph *G,Mgraph g) {
	g.numedg = G->numedg;
	g.numvex = G->numvex;
	for (int i = 0; i < G->numvex; i++) {
		ArcNode  *p = G->adjlist[i].firstarc;
		while (p != NULL) {
			g.edg[i][p->adjvex] =1;
			p = p->nextarc;
		}
	}
}

头插入创建图

AGraph   *a(int v, int e) {
	AGraph* G = new AGraph;
	G->numvex = v;
	G->numedg = e;
	for (int i = 0; i < v; i++)
		G->adjlist[i].firstarc = NULL;
	for (int i = 0; i < e; i++) {
		int v1; int v2;
		cin >> v1;
		cin >> v2;
		ArcNode *p = new ArcNode;
		p->adjvex=v2;
		p->nextarc = G->adjlist[v1].firstarc;
		G->adjlist[v1].firstarc = p;

		ArcNode  *q = new ArcNode;
		q->adjvex = v1;
		q->nextarc = G->adjlist[v2].firstarc;
		G->adjlist[v2].firstarc = q;
	}
		return G;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝阔落的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值