06 2020 档案
关键路径
摘要:关键路径 AOE网 在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网。 AOE网具有以下两个性质: 只有在某个顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始; 只有在进入某顶点的各有
拓扑排序
摘要:拓扑排序 AOV网 用顶点表示活动的网 用DAG图(有向无环图)表示一个工程。顶点表示活动,有向边<vi,vj>表示活动vi必须先于vj进行 不允许存在环路 拓扑排序 拓扑排序:在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序: ①每个顶点出现且只出现一次。
有向无环图——描述表达式
摘要:有向无环图——描述表达式 DAG图 若一个有向图中不存在环,则称为有向无环图,简称DAG图 DAG描述表达式 节省存储空间 解题方法 Step1:把各个操作数不重复地排成一排 Step2:标出各个运算符的生效顺序(先后顺序有点出入无所谓) Step3:按顺序加入运算符,注意“分层“ (利用下面一层的
最短路径——Floyd算法
摘要:最短路径——Floyd算法 可以用来求带权图和无权图 Floyd算法:求出每一对顶点之间的最短路径 使用动态规划思想,将问题的求解分为多个阶段 第一个矩阵就是图的邻接矩阵 第二个矩阵表示两个顶点之间的中转点 遍历上一个阶段留下来的矩阵A,对于上一个矩阵A当中的每一个具体的元素我们都进行: 若 A^(
最短路径——Dijkstra算法
摘要:最短路径——Dijkstra算法 BFS算法的局限性 Dijkstra算法 第一轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点vi,令final[i]=true; 检查所有邻接自vi的顶点,若其final值为false,则更新dist和path的信息 第二轮:循环遍历所有结点,找到
最短路径——BFS算法
摘要:最短路径——BFS算法 单源最短路径问题 每对顶点间的最短路径 BFS求无权图的单源最短路径 bool visited[MAX_VERTEX_NUM]; //访问标记数组 //广度优先遍历 void BFS(Graph G,int v){ //从定点出发,广度优先遍历图G visit(v); //访
图——最小生成树
摘要:最小生成树 生成树是啥? 包含图中全部顶点的一个极小的联通子图。 n个顶点,n-1条边 最小生成树(最小代价树) 带权的连通图,找到各边权值之和最小的 对于一个带权的无向图G=(V,E),生成树不同,每棵树的权也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最
图的遍历DFS
摘要:图的遍历DFS 与树的深度优先遍历之间的联系 树的深度优先遍历分为:先根,后根 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R); //访问根节点 while(R还有下一个子树T) PreOrder(T); //先根遍历下一棵子树
图的遍历BFS
摘要:图的遍历BFS 广度优先遍历 深度优先遍历 可以进行标记 树的广度优先遍历,我们用了辅助的队列 bool visited[MAX_VERTEX_NUM] //访问标记数组 //广度优先遍历 void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G visit(v); //
图——基本操作
摘要:图——基本操作 判断图G是否存在边<x,y>或(x,y) 邻接矩阵的话就找两个结点对应的数值是否为1 邻接表就顺着边结点遍历看看有没有 列出图G中与结点x相邻的边 邻接矩阵就遍历某一行或某一列的所有值,如果是1就罗列出来 邻接表就遍历边结点链表 图G当中插入顶点x 从图G中删除顶点x 邻接矩阵,把要
图的存储
摘要:图的存储 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{ char Vex[MaxVertexNum]; //顶点表 int Edge[MaxVertexNum][MaxVertexNum];
图
摘要:图 图G由顶点集V和边集E组成,记为G=<V,E> 其中V(G)表示图G中顶点的有限非空集; E(G)表示图G中顶点之间的关系(边)集合。 若V={v1,v2,...,vn},则用**|V|表示图G中顶点的个数**,也成为图G的阶, E={(u,v),u∈V,v∈V},用**|E|来表示图G中边的条
解个非齐次线性方程组
摘要:某天作业要做一个类似解方程组的操作,刚好在那个时候又在看永乐大帝的线性代数。想着看看能不能用代码实现以下,当然只是很简陋的操作了一下数组而已,结果如下: 题目: 西瓜5块钱一个,哈密瓜3块钱一只,李子3个一块钱,用100块钱买水果, 其中西瓜、哈密瓜和李子都必须要有且总共100个,问西瓜、哈密瓜和李
哈夫曼树
摘要:哈夫曼树 重点:构造哈夫曼树 带权路径长度 结点的权:有某种现实含义的数值(如:表示节点的重要性等) 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该节点上权值的乘积。 树的带权路径长度:树中所有叶节点的带权路径长度之和(WPL,Weighted Path Length) \[ WP
平衡二叉树(AVL)
摘要:平衡二叉树(AVL) 平衡二叉树的定义:树上任何一个结点的左子树和右子树的高度差不超过1. 结点的平衡因子:左子树高-右子树高 平衡二叉树的结点的平衡因子值只可能是1,-1,0. //平衡二叉树结点 typedef struct AVLNode{ int key; //数据域 int balance
二叉排序树(BST)
摘要:二叉排序树(BST) 二叉排序树,又称二叉查找树(BST) 左子树结点值<根节点值<右子树结点值 如果用中序遍历来遍历一棵二叉排序树的话,可以得到一个递增的有序数列 左根右 二叉排序树的查找 //二叉排序树结点 typedef struct BSTNode{ int key; struct BSTN
树、森林的遍历
摘要:树、森林的遍历 树的先根遍历 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R);//访问根节点 while(R还有下一个子树T){ PreOrder(T); } } } 将上述的树转换为二叉树 树的先根遍历序列与这棵树相应的二叉树的
树——存储结构
摘要:树——存储结构 双亲表示法(顺序存储) 双亲表示法:每个节点中保存指向双亲的“指针” #define MAX_TREE_SIZE 100 //树中最多的结点数 typedef struct{ //树的结点定义 ElemType data; //数据元素 int parent; //双亲位置域 }PT
线索二叉树(找前驱/后继)
摘要:线索二叉树(找前驱/后继) 建立线索的初衷就是为了在一个结点中能够更方便找到前驱结点和后继结点。 中序线索二叉树 先序线索二叉树 后序线索二叉树 中序线索二叉树找中序后继 //找到以p为跟的子树中,第一个被中序遍历的结点 ThreadNode *Firstnode(ThreadNode *p){ /
二叉树的线索化
摘要:二叉树的线索化 线索二叉树: 中序线索化 左中右 先序线索化 中左右 后序线索化 左右中 用土办法找到中序前驱 //中序遍历 void findPre(BiTree T){ if(T!=NULL){ findPre(T->lchild); //递归遍历左子树 visit(T);//访问根节点 fin
python作业-2048小游戏
摘要:需了解的知识 Pygame中的各个模块及其功能: Pygame.init():初始化所有导入的模块 pygame.display: pygame.display.init() — 初始化 display 模块 pygame.display.set_mode() — 初始化一个准备显示的窗口或屏幕 p