笔记
E鸽子
生命诚可贵
展开
-
POJ2387(Til the Cows Come Home)
题目描述:给出一个n个点,m条无向边的(带非负边权)的图,求出从1走到n的最短路n <= 1000 , m <= 2000,有重边。样例输入5 51 2 202 3 303 4 204 5 201 5 100样例输出90完整代码:#include <iostream>#include <cstdlib>using namespace std;const int M = 1001;int edge[M][M];int path[M] ,原创 2021-12-04 14:20:12 · 599 阅读 · 0 评论 -
Dijkstra算法#C
算法思路:1.设置两个顶点的集合S,T。a) S中存放已经知道最短路径的顶点,初始时,集合S只有一个顶点,即源点v0。b) T中存放当前还未找到的最短路径的顶点。2.在T集合中选取当前最短的一条最短路径(v0,…,vk),从而将vk加入到顶点集合S中,并且修改源点v0到T中各顶点的最短路径长度。3.重复步骤2,直到所有顶点都被加入到集合S中。从v0到T中顶点vk的最短路径,要么是从v0到vk的直接路径,要么是从v0经S中某个顶点vi到vk的路径在Dijkstra算法里,重复做以原创 2021-12-04 13:30:05 · 919 阅读 · 0 评论 -
宽搜求迷宫最短路径#C
题目描述给你一个迷宫,并给你一个起点和终点,请你给出从起点到终点的最短路径,若不存在最短路径,输出 -1。迷宫中用 ‘#’ 代表障碍,’S’’G’分别代表起点和终点,其余字符都可以走。输入描述第一行两个数代表迷宫的大小(行数m和列数n)后面的 m 行是迷宫。输入样例:10 10#S######.#…#…#.#.##.##.#.#…##.##.####…#…#.#######.#…#….####.###.…#…G#输出样例:22代码:#include <iostr原创 2021-11-29 17:38:08 · 654 阅读 · 0 评论 -
P3884 [JLOI2009]二叉树问题#C/C++
题目描述:如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:深度:4 宽度:4(同一层最多结点个数)结点间距离: ⑧→⑥为8 (3×2+2=8)⑥→⑦为3 (1×2+1=3)注:结点间距离的定义:由结点向根方向(上行方向)时的边数×2,与由根向叶结点方向(下行方向)时的边数之和。输入格式输入文件第一行为一个整数n(1≤n≤100),表示二叉树结点个数。接下来的n-1行,表示从结点x到结点y(约定根结点为1),最后一行两个整数u、v,表示求从结点u到结点v的距离。输出格式原创 2021-11-24 21:12:58 · 201 阅读 · 0 评论 -
线段树-数组实现#C/c++
描述三个操作:1.build创建线段树 2.update单节点修改 3.query区间和的求值1.创建线段树数组存储,用回忆堆的存储方式,线段树的使用和递归息息相关数组a[]存储创建线段树的值,t[]为数组存储后的线段树代码:void build_tree(int a[] , int t[] , int node , int start , int end){ if(start == end) //递归出口,当start=end时表示到了叶子节点 { t[node] =原创 2021-11-20 17:24:51 · 445 阅读 · 0 评论 -
多项式求导#C
描述将多项式求导并输出,不破坏原本的多项式的情况下#include <iostream>#include <cstdlib>using namespace std;// A = 1x^0 + 2x^3 + 4x^4 + 1x^5typedef struct node{ int x , y; struct node * next;} * link;link Create_L() { link H , p , q; int a , b; H = (nod原创 2021-11-19 19:31:14 · 366 阅读 · 0 评论 -
头插法合并链表-C++
实现代码#include <iostream>#include <cstdlib>using namespace std;typedef struct Node{ int data; struct Node * next;}Node , * linkList;void Travel(linkList H)//遍历 { if(H -> next) { linkList p; p = H -> next; while(p != NULL原创 2021-11-09 18:23:08 · 900 阅读 · 0 评论 -
自调链表-C++
描述每一次插入元素都在链表的前面插入,每一次find一个节点,都将找到的该节点放在链表的最前端若没找到则返回False。完整代码及测试#include <iostream>#include <cstdlib>using namespace std;typedef struct Node{ int data; struct Node * next;}Node , * linkList;void print(linkList H)//遍历 { if(H -原创 2021-11-09 18:04:40 · 1032 阅读 · 0 评论 -
判断同类二叉树
描述根节点相同,左右孩子节点都相同的两颗二叉树,也可以同为空树#include <iostream>#include <cstdlib>using namespace std;typedef struct node{ int data; struct node * left; struct node * right;}* link;link DFS(link H , link s);void print(link H , int a , int b);li原创 2021-11-07 14:08:56 · 53 阅读 · 0 评论 -
trie字典树#C++#C
定义 trie,又称前缀树或者字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串你与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值 1.创建节点typedef struct trie{ int end;// int cnt; struct trie * next[26];} * T;T原创 2021-11-03 18:33:32 · 118 阅读 · 0 评论 -
环形队列-数组实现
通过判满操作输入,再通过判空操作遍历测试及完整代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 6;typedef struct que{ int Q[maxn]; int front , rear; } * link;//初始化 void Init(link q){ q -> front = q -> rear = 0;}//入队原创 2021-11-01 21:17:12 · 76 阅读 · 0 评论 -
多项式的合并-链表实现
描述键盘输入A,B两多项式,假设 A = 1x^2 + 2x^3 + 4x^4 + 1x^5 B = 9x^0 + 4x^1 + 3x^2 + 6x^3 得到的结果 C = 9x^0 + 4x + 4x^2 + 8x^3 + 4x^4 + 1x^5例如:输入时,A表示为 1 2 2 3 4 4 1 5 0 0 ,其中0 0 为存入的终止判断 每两个数为一组,分别为A的某项的系数和指数 (***A,B都是指数从小到大排序好的多项式)过程1原创 2021-11-01 19:29:18 · 1317 阅读 · 0 评论 -
括号匹配-栈
题目检查一段C语言代码的小括号( )、 中括号 [ ] 和大括号{ } 是否匹配。/**/,(),[],{}思路 将这段代码存入以字符串中,遍历字符串,分两种情况 1./**/,遇到'/'并且栈顶元素不等于'/'时,将其入栈,初始情况栈为空,遇到‘*’同理, 再次遇到这些符号时则栈顶元素出栈 2.'()','[]','{}',这三种符号,只需要在遇到'(','[''{'时入栈,遇到')',']','}'时将栈顶元素出栈 遍历完后判断栈是否为空,若为空则符号匹配,否则不匹配代码原创 2021-11-01 18:03:37 · 221 阅读 · 0 评论 -
堆的STL实现#C++
代码:#include <iostream>#include <queue>#include <vector>using namespace std;priority_queue<int> q;/*1.q.top() 获得堆中最大的元素2.q.empty() 判断是否为空3.q.size() 返回堆的大小4.q.push() 插入元素5.q.pop() 删除第一个元素 */ template <typename T> vo原创 2021-10-27 23:58:28 · 133 阅读 · 0 评论 -
用数组完全二叉树实现堆#C++
堆的基本操作#C++有很多种数据结构可以实现最小堆,包括:完全二叉树,左偏树,斜堆,二项堆,斐波那契堆等等,完全二叉树是这里面内存利用效率最高的。top:返回当前的最小值直接返回根节点,时间复杂度为O(1)int top(){ return h[1];}pop:弹出当前的最小值 (shift_down)删除根节点,递归把子节点补上来完全二叉树pop :先把根节点删除,再把最后一个节点移动到根,然后从上往下更新void pop(){ h[1] = h[heap_siz原创 2021-10-27 23:13:53 · 187 阅读 · 0 评论 -
线性表实现队列-数组实现
代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 1010;typedef struct node{ int data[maxn]; int front , tail;} * link;//初始化void Init(link que){ que -> front = que -> tail = 0;}//入队void Enter_que(原创 2021-10-27 20:00:22 · 68 阅读 · 0 评论 -
线性表实现栈-数组实现
代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 1010;typedef struct node{ int data[maxn]; int top;} * link;void Init(link stk){ stk -> top = 0;}void Push_stk(link stk , int x){ stk -> data[++st原创 2021-10-27 19:37:04 · 72 阅读 · 0 评论 -
二叉树代码实现及解析#C++
二叉树的定义:每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。思维导图:结构体:在定义结构体时候,需要定义三个指针,left为左指针,right为右指针,parent为父节点的指针typedef struct Btree{ int data; struct Btree * left; struct Btree * right; struct Btree * parent;}* Bnode;基础的函数的声明:Cre原创 2021-10-26 12:32:20 · 344 阅读 · 0 评论 -
线性表-通讯录的链表实现#C++
线性表-通讯录的链表实现流程图:代码:#include <iostream>#include <cstdlib>#include <cstring>#include <fstream>using namespace std;int len = 0;typedef struct stu{ char id[1001]; char name[1001]; char numb[1001]; struct stu * next;}stu原创 2021-10-23 10:12:46 · 811 阅读 · 0 评论 -
队列的链表实现#C++
队列的链表实现#C++front 队首rear 队尾在尾部入队,在头部出队代码及解析:#include <iostream>#include <cstdlib>using namespace std;typedef struct node //节点 { int data; struct node * next;}* l;typedef struct que //队列 { struct node * front; struct node * rear;原创 2021-10-25 20:34:20 · 66 阅读 · 0 评论 -
冒泡排序#C++
冒泡排序#C++#include <iostream> using namespace std;int main(){ int arr[1001]; int n; cin >> n; for(int i = 0 ; i < n ; i++) cin >> arr[i]; for(int i = 0 ; i < n - 1 ; i++) for(int j = 0 ; j <原创 2021-10-25 02:09:22 · 86 阅读 · 0 评论 -
二叉树的创建和遍历#C++
二叉树的创建和遍历代码:#include <iostream>using namespace std;/*二叉排序树的二叉链表存储结构*/typedef struct BTNode { int key; struct BTNode *lchild, *rchild;}*BSTree;/*二叉排序树的插入*///递归的过程BSTree InsertNode(BSTree T, BTNode *s) { if (T == NULL) retur原创 2021-10-24 00:25:02 · 49 阅读 · 0 评论