c语言
文章平均质量分 67
Rebright-崇明
神说要有光,于是便有了我
展开
-
图的邻接表表示法(C语言)
邻接表 邻接表数据结构类型如下:#define MaxVertices 100typedef struct node{ //边表 int adjvex; node* next; }EdgeNode; typedef struct{ //顶点表 int vertex; EdgeNode* edgenext; }VertexNode; ty原创 2017-08-19 12:06:05 · 34193 阅读 · 9 评论 -
最小生成树构造算法--Prim算法,Kruskal算法(C语言)
最小生成树最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。 最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。我们将以下面的带权连通图为例讲解这两种算法的实现: 注:由于测试输入数据较多,程序可以采用文件输入 Prim(普里姆)算法 时间复杂度:O(N^2)(N为原创 2017-08-20 10:37:28 · 47576 阅读 · 7 评论 -
全源最短路径之弗洛伊德算法(C语言)
Floyd(弗洛伊德)算法该算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。 时间复杂度为 O(N^3) 空间复杂度为 O(N^2) Floyd算法蕴涵了动态规划的思想, 简单说:从任意节点i到任意节点j的最短路径存在两种可能直接从i到ji经过若干个节点k到j所以,我们假设Di原创 2017-08-23 09:24:51 · 5808 阅读 · 2 评论 -
连通图遍历策略之深度优先搜索(C语言)
深度优先搜素(DFS)深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。深度优先搜索类似于树的前序遍历原创 2017-08-21 13:08:47 · 5023 阅读 · 0 评论 -
单源最短路径之迪杰斯特拉算法(C语言)
Dijkstra(迪杰斯特拉)算法采用广度优先搜索思想,对有向赋权图寻找最短路径。 该算法对于不含负权的有向图来说,是目前已知的最快的单源最短路径算法。 时间复杂度:O(n^2) 基本原理:不断为为每个顶点 v 保留目前为止所找到的从s到v的最短路径 上图为戴克斯特拉算法应用示意图。 起点以左下角的红点,目标是右上角的绿点,中间灰色的倒L型为障碍物。蓝色空圈表示”暂定”,用以搜索...原创 2017-08-22 22:11:37 · 7840 阅读 · 0 评论 -
连通图遍历策略之广度优先搜索(C语言)
广度优先搜素(BFS)广度优先搜索(又称宽度优先搜索)算法是最简便的图的搜索算法之一,该算法属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。广度优先搜素也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。广度优先搜素类似于树的层次遍历,遍历原创 2017-08-21 12:07:15 · 3095 阅读 · 0 评论 -
快速排序(C语言)
快速排序快速排序是一种不稳定排序,它的时间复杂度为O(n·lgn),最坏情况为O(n2);空间复杂度为O(n·lgn)。 这种排序方式是对于冒泡排序的一种改进,它采用分治模式,将一趟排序的数据分割成独立的两部分,其中一组数据的每个值都小于另一组。每一趟在进行分类的同时实现排序。 其中每一趟的模式通过设置key当基准元素,key的选择可以是数据的第一个,也可以是数据的最后一个。这里以每次选取数原创 2017-07-28 11:09:43 · 3792 阅读 · 1 评论 -
哈希表,哈希算法(C语言)
哈希表哈希表,又称散列表,常用于在海量数据中查找数据哈希表中元素是由哈希函数确定的。将数据元素的关键字key作为自变量,通过一定的函数关系H(称为哈希函数),计算出的值,即为该元素的存储地址。其优点是:运算速度快;缺点是:基于数组、难于扩展,不可遍历。在建立一个哈希表之前需要解决两个主要问题:构造均匀的哈希函数 使H(key)均匀分布在哈希表中,以提高地址计算的速度。 构造哈希函数的方法:直接原创 2017-08-15 16:17:31 · 10718 阅读 · 1 评论 -
图的邻接矩阵(C语言)
邻接矩阵 无向图和有向图在邻接矩阵中的表示方法: 无向图和有向图大同小异,在这里只以无向图为例,代码部分通过简单调整即可对应编译有向图邻接矩阵数据类型定义#define MaxVertices 100 //定义最大容量typedef struct{ //包含权的邻接矩阵的的定义 int Vertices[MaxVertices]; //顶点信息的数组 int Edge[Max原创 2017-08-18 17:57:34 · 49695 阅读 · 5 评论 -
动态规划之背包问题(C语言)
动态规划动态规划(英语:Dynamic programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题 动态规划思想大致上为:若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 由于通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算原创 2017-08-24 18:12:54 · 17747 阅读 · 4 评论