自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 c中math.h里面的两个log函数使用方法

2021-01-31 23:48:43 1563

原创 (二叉树下)建堆、堆实现优先队列、堆排序、用堆实现的一种比快排时间复杂度还低的算法

满二叉树:树高为h且 结点总数完全二叉树:树高为h且 结点总数

2021-01-31 23:29:58 213

原创 最短路算法:插点法 Floyd、边松弛法 Dijkstra、点松弛法 Bellman_Ford、队列加速下的点松弛法SPFA

说在开头的话:其实这些最短路径的算法,包括常见的插点,边松弛(因为说他们的名字和他们的算法思想联系不起来,所以我都这样称呼,官方称呼是floyddijstra),他们就提出的时候的思想来定义他们的优缺点,但是编程又不是单纯的实现,如果想避免它的缺陷,完全可以加入自己需要的判定方法来避免它们的缺陷。并不是说,非黑即白,硬给他们划阵营。这样来总结更客观一些,因为我发现编程的时候可以既使用这个算法,又可以避免它本身的缺陷。介绍几个概念:负权回路:在一个图里每条边都有一个值(有正有负)如果..

2021-01-31 15:50:36 2422 1

原创 最优算法的意义

很多算法,发出来的时间复杂度一般是最优程序,优化最彻底(目前为止),即时间最快,空间占用最少。它们一般是由最初的思路作为基础,经过多次优化和改进得到的最终结果。优化对于程序来说,至关重要,它代表着科技的进步。所以,最优秀的程序才是最重要的。...

2021-01-31 12:49:48 757

原创 Bellman_Ford 可以检测到负权回路,但是带有负权边的非负权回路检测不出来

负权回路:在一个图里每条边都有一个值(有正有负)如果存在一个环(从某个点出发又回到自己的路径),而权且这个环上所有权值之和是负数,那这就是一个负权环,也叫负权回路存在负权回路的图是不能求两点间最短路的,因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。Bellman_Floyd 可以检测到负权回路,但是带有负权边的非负权回路检测不出来。...

2021-01-31 00:29:03 240

原创 邻接表用数组来实现的思路

测试程序#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int u[100],v[100],w[100];int first[100],next[100];int main(){ int n,m; scanf("%d %d",&n,&m); for(int i=1; i<=m; i++) {...

2021-01-30 17:24:54 261

原创 邻接矩阵和邻接表

邻接矩阵用来存储边多的图,一般用在稠密图邻接表用来存储边少的图,一般用在稀疏图

2021-01-30 16:37:26 319

原创 稀疏图和稠密图的定义

一个图中,顶点数 n 边数 m当>>m 时,我们称之为稀疏。当m相对较大时,我们称之为稠密。

2021-01-30 16:08:54 8865

原创 边松弛法解决单源最短路

边松弛法空间复杂度 O(M) 时间复杂度O((M+N)logN)适用于稠密图(顶点一定的情况下,边越多越划算)存在负权边的情况下,不能算出最短路径注释:N:图中顶点个数M:图中边的个数...

2021-01-30 14:28:20 175

原创 Floyd 可以在存在负权边的图中应用,求得多源最短路径;存在负权回路的图中无法求得多源最短路

很多人认为插点法不实用负权回路,这种说法其实不正确。

2021-01-29 14:34:12 969

原创 memset详解

第一:memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。第二:memset(void *s, int ch,size_t n);中ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节,比如int a[5]赋值memset(a,-1,sizeof(int )*5)与memset(a,511,sizeof(int )*5) 所赋值的结果是一样的都为-1;因为-1的二进制码为(11111111 1

2021-01-27 22:07:08 4150

原创 再谈——函数内无处不在的“栈”(程序语句在内存中是以栈的形式存储的)

#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ int n[10]={1,2,3,4,5,6,7,8,9,10}; int i=0; while(i<=9) { printf("%d %d\n",n[i++],n[i++]); }}

2021-01-27 18:39:03 115

原创 c/c++中二维数组在内存中的存储

#include<stdio.h>#include<string.h>int main(){ int num[10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { printf("%x ",&num[i][j]); } printf("\n"); } for...

2021-01-25 19:00:34 1111

原创 malloc 挑战 栈的存储方式

第一次运行第二次运行第三次运行结论:void* 类型变量的地址不符合栈的存储方式。修改指针类型后第一次运行第二次运行仍然不符合栈的存储方式

2021-01-24 11:51:42 127

原创 const 的作用

2021-01-24 11:03:34 143

原创 static相关的一些编程心得

1. 使用static声明变量 :避免栈中数组越界导致不可预知错误#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ static int queue[100]; static int a[10]; static int b[10]; memset(queue,0,sizeof(queue)); ...

2021-01-23 23:22:03 182

原创 c中数组越界Process returned -1073741819 (0xC0000005)

数组越界会报错:Process returned -1073741819 (0xC0000005)debug:应该检查数组下标在何处超越定义的数组大小。

2021-01-23 19:53:47 2245

原创 函数scanf()和gets()的区别

#include<iostream>#include<string.h>using namespace std;int main(){ char a[101],s[101]; int i,len,mid,next,top; gets(a);// scanf("%s",&a); cout<<a<<endl; char ch; ch=getchar(); if(ch=='\n') .

2021-01-22 15:08:43 164

原创 c中int和long long的区别

注意:两位有 00=0 01=1 10=2 11=3 四个数,2^2-1=4-1=3(10进制)=11(二进制)int 4byte=32位 第一位符号位,即2^31-1=1111111 11111111 11111111 11111111(二进制)=2147483648-1(十进制)同理: long long (int) 8byte=64位。...

2021-01-21 21:27:11 252

原创 codeblocks 字体光标颜色设置

CODEBLOCK:是一款个人认为比较好的的编译器。大家在编写程序的时候,按照自己的喜好设置codebloock的背景颜色和光标的颜色之后,不仅显得美感许多,而且相信在一定程度上对学习效率 帮助,下面根据自己的经验写一下如何设置背景颜色:1、设置光标:Setting-->Editor-->margins and caret-->caret的color中设置。2、字体:setting->editor->syntax highlighting选择刚..

2021-01-21 21:14:51 1416

原创 一谈——一篇文章揭秘函数中变量在内存中的存储

#include<stdio.h>int main(){ int i; printf("sizeof(i)=%d \n",sizeof(i)); int a[10]; printf("sizeof(a[i])=%d\n",sizeof(a[1])); printf("&a[10]=%d\n",&a[10]); for (i = 0; i <= 10; ++i)//死循环 { a[i] = 0; .

2021-01-21 19:54:37 258

原创 就桶排和冒泡为例说说算法的时间复杂度

关于桶排时间复杂度的问题,计算的时候其实要看 m和n有没有关系,m是1~1000,那最外层就是1000次,里面哪个循环要判断通里面是否存取了数据,里面存的是频率,频率和最外层也就是1~1000有没有关系,此时,里层循环共需要多少次,n次。所以时间复杂度是m+n。冒泡就不一样了,冒泡每一趟需要n次比对,需要m趟,所以是m*n,也就是n方。我们假设计算机运行一行基础代码需要执行一次运算。int aFunc(void) { printf("Hello, World!\n"); ..

2021-01-20 14:12:51 124

原创 codeblocks修改背景颜色

复制以下代码到default.conf替换掉C:\Users\yourusername\AppData\Roaming\CodeBlocks目下下的default.confSettings>Editor>Syntax Highlighting在colour theme中选择自己喜欢的,比如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CodeBlocksConfig version="1".

2021-01-13 11:15:41 3374 2

原创 new关键字来创建c++中一维二维三维的动态数组及其相应的删除方法

一、C++创建一维数组type *p = new type [N] type是指具体的数据类型, N代表的是一维数组的列数 每次使用new后都要释放 delete[] p1; 二、C++创建二维数组 一般的格式:type (*p)[N] = new type [][N] type是指具体的数据类型, N代表的是二维数组的列数另一种格式:不需要写列数当然在每次使用完动态数组后,需要将其释放#include<iostream>#include<s

2021-01-01 21:49:15 662

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除