- 博客(13)
- 收藏
- 关注
原创 拓扑排序 C语言实现---图论
算法思想 计算每个节点的入度,每轮输出入度为零的节点,并且将已经输出的节点从图中删除。即,将该节点指向的节点入度减一; 在实现上,维护一个入度数组,保存每个节点的入度,每一轮将入度为零的节点入栈(这里用队列也可以,只是作为存储入度为零的节点并且规定他们之间的输出顺序),并将他们指向的节点入度减一。 代码实现 以邻接矩阵存储图结构为例,代码如下(伪代码,栈或队列需要实现) #define MAX_VEXNUM 100 typedef struct{ int vex[MAX_VEXNUM];
2021-11-01 18:32:25
427
原创 Floyd算法 C语言实现
算法思想 维护一个当前最短举例矩阵lowcost,lowcost[i][j]表示当前从i到j的最短距离,初始为图的邻接矩阵,此后对该矩阵进行n(图中节点的个数)次迭代,第k次迭代的过程为,对lowcost[i][j]进行更新,考虑从节点i到节点j经过第k个节点,距离是否减小,若减小,则更新lowcost矩阵,具体为比较lowcost[i][k]+lowcost[k][j]与lowcost[i][j],并且用path[i][j]将路径保存 代码 #define MAX_VEXNUM 100 typedef s
2021-10-29 17:52:03
575
原创 Dijkstra算法 C语言实现---数据结构图论算法
算法思想 维护三个数组, 一个visited数组,表示是否已经划入最短路径 一个lowcost数组,表示从初始节点到达各个节点的最小代价 一个path数组,用来存放最短路径,path[i]代表节点i的前驱节点,根据不断寻找前驱节点可以描述整个路径。 思想类似于Prim算法,使用贪心的策略,每次从lowcost数组中选择最小值归入最短路径,并且根据已经并入的节点更新lowcost数组,具体细节可见代码。 代码 使用临界矩阵存储为例,代码如下 #define MAX_VEXNUM 100 typedef s
2021-10-25 22:00:35
721
原创 C语言实现Prim算法
C语言实现Prim算法话不多说,思想简单,直接上代码 维护两个数组。 一个lowcost数组,表示当前已经归入最小生成树的结点集合与未归入的集合节点之间的最小代价; 一个visited数组,表示是否已经归入最小生成树 每次从lowcost数组中找到未归入最小生成树但代价最小的节点,将之归入最小生成树,之后根据归入的新节点更新lowcost数组 直到所有节点全部归入最小生成树,算法结束; 下例用未压缩的邻接矩阵存储图 话不多说,思想简单,直接上代码 #define MAX_VEXNUM 100 typedef
2021-10-24 21:29:45
4979
2
原创 动态规划法 最长公共子串 golang
思想 创建数组array[i][j]代表text1中以text[i]为首字母的字符串与text2中以text2[j]为首字母的字符串匹配的最大长度 得到递推公式 array[i][j]=array[i+1][j+1] (text1[i]==text2[j]) array[i][j]=0 (text1[i]!=text2[j]) 首先处理边界 当字符串长度为1的时候,只有text1[i]==text2[j],array[i][j]=1,否则为0 代码 package main import "fmt" f
2021-03-19 14:46:44
396
原创 剑指 Offer 13. 机器人的运动范围 go语言
题目要求 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子? 提示 1 <= n,m <= 100 0 <= k <= 20 go
2021-03-07 21:34:05
252
原创 添加右键菜单-在vscode中打开
第一种方法 建立一个文本文件,写入如下的文本 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\VSCode] @="Open with Code" "Icon"="C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe" [HKEY_CLASSES_ROOT\*\shell\VSCode\command] @="\"C:\\Program Files (x86)\\Micro
2020-09-27 00:02:04
716
1
原创 队列的数组及链表实现,C语言代码
数组实现 基本思想 用线性表实现队列如图所示:队尾指向最后一个数据元素的后一个位置,所以front==rear代表队列为空 在队尾插入元素,在队头取元素,一般我们用这个结构实现循环队列,取元素时front=(front+1)%Size,插入元素使用rear=(rear+1)%Size,由于是循环队列,所以队列满的条件也变为了rear==ront为了解决这个问题,我们将队列中闲置一个元素,将rear...
2020-04-06 17:57:52
308
原创 栈的定义以及基本操作C语言实现--线性栈和链式栈
栈的定义以及基本操作C语言实现 栈本身就是线性表,只不过是操作受限制,数据元素后进后出 用顺序表表示栈 栈的声明 #define InitSize 5 #define Elemtype int #define Status int #define OK 1//返回的操作结果,比如某个操作是否成功 #definw OVERFLOW -1 #define ERROR -1 typedef stru...
2020-04-05 18:16:09
321
原创 栈的应用C语言实现(一),中缀表达式转后缀表达式
一、进制转换 使用辗转相除法作进制转换,比如下面的十进制转二进制 void Base_conversion(int num){//将num转化为二进制输出 int temp,e; Stack S; InitStack(&S); while(num){ temp=num%2; PushStack(&S,temp); ...
2020-04-01 21:47:27
1032
2
原创 定点数的编码表示
定点数的编码表示 最常见的有原码、反码、补码、移码四种编码方式 原码 常用来表示浮点数的尾数 最高位是符号位,数值部分用真值的绝对值表示 反码 直接是原码的按位取反,在求补码的过程中会用到反码,纯粹是为了硬件容易实现 补码 用来表示定点整数 补码的来源------模运算 一个负数的补码等于模数减去该负数的绝对值,当X<0时,[X]=M-|X|=M+X,(这里的M表示模数,[X...
2020-03-24 21:46:10
3826
原创 线性链表的合并
一、将所有在Lb中,不在La中的数据元素插入到La中 int LocateElem(List *head,int e){//查找在链表中有没有数据域是e的节点,有的话返回1,否则0 List *p=head->next; while(p){ if(p->data==e) return 1; } return 0; ...
2020-03-20 16:53:56
2083
1
原创 关于fgetc,getc,getchar和scanf的一些小知识
在C语言中,一个char类型的字符可以用int型的数参照ASCII表来表示,比如 char ch = 49; printf("%c", ch); 这段代码会输出1,因为字符**‘1’**对应的ASCII就是49 getchar的声明如下 int getchar(void) 即读入字符按照char类型处理,而返回值则是这个char类型的数据对应的int值,与scanf不同,scanf可以指定输入...
2020-03-06 11:07:43
1128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人