摘要: 最小生成树: 限制条件:树的节点个数必须和图中节点个数一样 不能有回路 正好有节点数-1条边 prim算法 辅助数组dist[] parent[] 每次从dist[]中选择最小的一个判断新插入的节点能不能使他的邻接点的dist变小 初始化dist[]为-1 如果已经收录在内的顶点的dist[]为0 阅读全文
posted @ 2017-12-02 12:15 晚风阿 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 无权单源最短路径问题(采用队列的形式和BFS差不多): 利用dist[]和path[] dist[]用来记录这个点到达源点的距离 path[]用来记录到达这个顶点的路径 默认初始化dist[]为-1.path[]为-1 源点的dist[]为0 如果已经判断过最短路径的点dist[]不为-1path[ 阅读全文
posted @ 2017-12-02 12:07 晚风阿 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 两种遍历方法都使用了Visited[]这个数组来记录已经访问的节点 DFS(广度优先) 从头结点开始递归的来调用相邻的节点 void Visit( Vertex V ) { printf("正在访问顶点%d\n", V); } /* Visited[]为全局变量,已经初始化为false */ voi 阅读全文
posted @ 2017-12-02 11:50 晚风阿 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 图的两种表达方式 邻接矩阵(用一个二维的数组来存储顶点间的距离): 采用链式存储的方法表示图 /* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值6553 阅读全文
posted @ 2017-12-02 11:46 晚风阿 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 堆分为最小堆和最大堆。最小堆指的是任意一个节点都有小于他的做儿子和右儿子。最大堆指的是任意一个节点大于打的左儿子右儿子。 最大堆的操作(堆得主要操作就是上滤和下滤) 插入:先将一个节点插入到堆得最后的位置然后上滤,如果他的父亲小于他,就把他父亲的值给他,继续循环,当退出循环的时候就是要插入的节点: 阅读全文
posted @ 2017-11-28 21:07 晚风阿 阅读(1394) 评论(0) 推荐(0) 编辑
摘要: 二叉搜索树(任意一个节点的左儿子小于节点 右儿子大于节点) 二叉搜索树的基本操作 插入:如果插入的值大于节点就往右子树插 反过来往左子树插入 删除:三种情况 1:删除的节点只有左子树:让他的指针指向他的左子树 然后释放当前节点 2:删除的节点只有右子树:让他的指针指向他的右子树 然后释放当前节点 3 阅读全文
posted @ 2017-11-28 20:47 晚风阿 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 树的四种遍历: 1:先序 2:中序 3:后序 4:层序:利用的是队列 中序 先序就是在push的前边输出结点信息 树的同构: 阅读全文
posted @ 2017-11-28 20:27 晚风阿 阅读(88) 评论(0) 推荐(0) 编辑