ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-05-29 22:32:19  阅读:206  来源: 互联网

标签: pre adjlist int ArcNode firstarc 顶点


图的思维导图

重要概念

图的定义

  • 图G是由两个集合V和E组成,记为G=(V,E),其中V是顶点的有限集合,记为V(G),E是连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G)。

图的基本术语

  • 端点和邻接点
  • 顶点的度、入度和出度
  • 完全图
  • 稠密图和稀疏图
  • 子图
  • 路径和路径长度
  • 回路或环
  • 连通、连通图和连通分量
  • 强连通图和强连通分量
  • 权和网

图的基本算法

  • 创建图的运算算法
void CreateAdj(AdjGreph * &G, int A[MAXV][MAXV], int n, int e) {
	int i, j;
	ArcNode* p;
	G = (AdjGraph*)malloc(sizeof(AdjGraph));
	for (i = 0; i < n; i++)
		G->adjlist[i].firstarc = NULL;
	for(i=0;i<n;i++)
		for(j=n-1;j>=0;j--)
			if (A[i][j] != 0 && A[i][j] != INF) {
				p= (ArcNode*)malloc(sizeof(ArcNode));
				p->adjvex = j;
				p->weight = A[i][j];
				p->nextarc = G->adjlist[i].firstarc;
				G->adjlist[i].firstarc = p;
			}
	G->n = n; G->e = e;
}
  • 输出图的运算算法
void DispAdj(AdjGraph* G) {
	int i;
	ArcNode* p;
	for (i = 0; i < G->n; i++) {
		p = G->adjlist[i].firstarc;
		printf("%3d: ", i);
		while (p != NULL) {
			printf("%3d[%d->", p->adjvex, p->weight);
			p = p->nextarc;
		}
		printf("^\n");
	}
}
  • 销毁图的运算算法
void DestroyAdj(AdjGraph*& G) {
	int i;
	ArcNode* pre, * p;
	for (i = 0; i < G->n; i++) {
		pre = G->adjlist[i].firstarc;
		if (pre != NULL) {
			p = pre->nextarc;
			while (p != NULL) {
				free(pre);
				pre = p; p = p->nextarc;
			}
			free(pre);
		}
	}
	free(G);
}

图的遍历

  • 深度优先遍历
  • 广度优先遍历
  • 用图遍历方法求解迷宫问题
typedef struct ANode {
	int i, j;
	struct ANode* nextarc;
}ArcNode;                       //边结点类型
typedef struct Vnode {
	ArcNode* firstarc;          //指向第一个相邻可走方块
}VNode;
typedef struct {
	VNode adjlist[M + 2][N + 2];//头结点数组
}AdjGraph;                      //迷宫图的邻接表类型

构造最小生成树的准则

  • 必须只使用该图中的边来构造最小生成树;
  • 必须使用且仅使用(n-1)条边来连接图中的n个顶点;
  • 不能使用产生回路的边。

拓扑排序方法

  • 从有向图中选择一个没有前驱(即 人度为0)的顶点并且输出它。
  • 从图中删去该顶点,并且删去从该顶点发出的全部有向边。
  • 重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。

疑难问题

-Kruskal的堆排序

标签:,pre,adjlist,int,ArcNode,firstarc,顶点
来源: https://www.cnblogs.com/xypeanut/p/14826621.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有