![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
五维生物
这个作者很懒,什么都没留下…
展开
-
最短路径 - 狄克斯拉特算法 Dijkstra - C语言实现
单源最短路径。源点到其余各个顶点的最短路径。例如求1号顶点到其余各点的最短路径,不停更新dis数组即可。基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。/*dis数组初始化*/void disInit(int sourcePoint,int n,int e[10][10],int dis[10]){ for(int i...原创 2019-06-19 15:45:26 · 1301 阅读 · 0 评论 -
最短路径 - 弗洛伊德算法 Floyd - C语言超简单实现
用一个二维矩阵存储网的信息。若有nnn个顶点,对任意从顶点iii到顶点jjj,权值为e[i][j]e[i][j]e[i][j]。弗洛伊德算法可以看作在在不停更新二维矩阵,核心代码如下:/* 动态规划思想 */for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(e[i][j]>e[i][k]+e...原创 2019-06-19 10:47:15 · 2594 阅读 · 0 评论 -
并查集 - C语言实现
#include <stdio.h>#define MAXSIZE 1000void init(int, int []);int getf(int);void disjointSetMerge(int,int);int f[MAXSIZE] = {0}; //我也不知道如何把递归函数中不用全局变量/*先阅读主函数是一个好习惯*/int main(){ in...转载 2019-06-20 10:38:50 · 3126 阅读 · 0 评论 -
最小生成树 - Kruskal 算法 - C语言实现
基本思路:先选择最小的边,每次选择后判断有没有回路。struct edge{ int u; int v; int w;};//存储边的关系void Kruskal(){ for(int i=1;i<=m;i++){ //判断一条边的两个顶点是否已经连通,即判断是否已在同一个集合中 if(disjointSetMerge(e[i]...转载 2019-06-20 22:28:39 · 915 阅读 · 0 评论 -
最小生成树 - 普里姆算法 Prim - C语言实现
此算法和Dijkstra算法相似。不过Dijkstra每次更新的dis数组是各个顶点到源点的距离;(dis[k]=dis[j]+e[j][k])而Prim算法每次更新的dis数组是各个顶点到生成树的距离;(dis[k]=e[j][k])void Prim(int n,int e[10][10],int dis[10],int book[10]){ int min,i,j,u,v; ...转载 2019-06-21 10:11:11 · 447 阅读 · 0 评论 -
AOE网与关键路径
AOE网(Activity On Edge Network)是一个有向图:顶点:事件;弧:活动;权:完成该活动所需的时间;源点:工程的开始,入度为0的事件,AOE网只能有一个源点汇点:工程的结束,出度为0的事件,AOE网只能有一个汇点每一事件v表示:以它为弧头的所有活动已经完成每一事件v表示:以它为弧尾的所有活动可以开始例子:上图为一个AOE网有4个事件:v1,v2,v...原创 2019-06-22 23:38:12 · 888 阅读 · 0 评论 -
排序算法 - 拓扑排序
定义:根据某个集合上定义的一个偏序求出该集合上的全序偏序:若集合X上的关系R是自反的,反对称的和传递的,称R是集合X上的偏序全序:设R是集合X上的偏序关系,如果对于每个 x,y∈X 必有 xRy 或 yRx,则称R是集合X上的全序关系通俗来讲,拓扑排序就是将集合上的元素按某种关系进行排序AOV网的拓扑排序算法流程在AOV网中选取一个没有前驱的顶点v开始遍历输出顶点v删除顶点v...原创 2019-06-23 09:35:36 · 284 阅读 · 0 评论 -
图的存储 - 邻接矩阵与邻接表 - C语言实现
邻接矩阵:#define MAXV <最大顶点个数>/* 顶点类型 */typedef struct { int no; //顶点编号 InfoType info; //顶点其它信息}VertexType;/* 完整的图邻接矩阵类型 */typedef struct { int edges[MAXV][MAXV]; in...转载 2019-06-23 11:27:31 · 1225 阅读 · 0 评论 -
图的遍历 -深度优先与广度优先 - C语言实现
结构体定义参考图的存储深度优先:int vistited[MAX] = {0};void DFS(AdjGraph *G, int v){ ArcNode *p; vistited[v] = 1; printf("%d",v); p = G->adjlist[v].firstarc; while(p!=NULL){ if(vist...转载 2019-06-23 11:47:22 · 2115 阅读 · 0 评论