数据结构与算法
文章平均质量分 81
PPPeyton
下一站
展开
-
二叉查找树
-BinarySearchTree.h#ifndef __BINARY_SEARCH_TREE_H__#define __BINARY_SEARCH_TREE_H__#include #include template >class BinarySearchTree {public: BinarySearchTree(); BinarySearchTree(const B原创 2015-11-18 11:59:45 · 344 阅读 · 0 评论 -
c010-删边问题
内容:删边问题(edges.pas)题目描述:连通图是指任意两个顶点都有路径可互相到达的图。读入一个无向的连通图,输出最多能删掉多少条边,使这个图仍然连通。输入文件(edges.in):第一行为图的顶点数N(1≤N≤100)和边数M,它们之间用一个空格隔开,图中的顶点用1到N的整数标号。接下来的M行,每行用两个数V1和V2表示一条边。V1与V2用一个空格隔开,表示这条边原创 2015-12-05 14:24:04 · 809 阅读 · 0 评论 -
有向图
-Digraph.h 有向图的类#ifndef __DIGRAPH_H__#define __DIGRAPH_H__#include #include class Digraph {private: int vNum; // 顶点数 int eNum; // 边数 std::list* adj;public: Digraph(int vnum); ~Digraph(原创 2015-12-05 21:50:47 · 394 阅读 · 0 评论 -
有向图(2)--深度优先搜索&&广度优先搜索
-DepthFirstDirectedPaths 深度优先搜索解决单点有向路径。给定一幅有向图和一个起点s,回答“从s到给定目的顶点v是否存在一条有向路径?如果有,请找出这条路径”等类似问题。#ifndef __DEPTH_FIRST_PATHS_H__#define __DEPTH_FIRST_PATHS_H__#include "Digraph.h"#include cla原创 2015-12-05 22:08:17 · 886 阅读 · 0 评论 -
有向图(3)--寻找有向环
在和有向图相关的实际应用中,有向环特别重要。从原则上来说,一幅有向图可能含有大量的环,在实际应用中,我们一般只会重点关注其中一小部分,或者只想知道它们是否存在。思路:一旦我们找到了一条有向边v->w且w已经存在于栈中,就找到了一个环,因为栈表示的是一条由w到v的有向路径,而v->w正好补全了这个环。同时,如果没有找到这样的边,那就意味着这幅有向图是无环的。#ifndef __DIREC原创 2015-12-06 11:44:32 · 2588 阅读 · 0 评论 -
有向图(4)--基于深度优先的拓扑排序
前序:在递归调用之前将顶点加入队列后序:在递归调用之后将顶点加入队列逆后序:在递归调用之后将顶点压入栈-DepthFirstOrder.h#ifndef __DEPTH_FIRST_ORDER_H__#define __DEPTH_FIRST_ORDER_H__#include "Digraph.h"#include #include // 基于深度优先的拓扑排序c原创 2015-12-06 14:10:49 · 1430 阅读 · 0 评论 -
有向图(5)--一般化的有向图&&拓扑排序
前面几篇的博客都是用int型做为顶点去研究算法的这样做的原因有:1.一开始用太复杂的类型可能会导致学习困难2.不管是什么类型都可以转换成用int型来表示,只需要一个符号表st和一个数组来做反索引即可接下来就是一般化的有向图的代码有关头文件在之前的几篇博客中都有-SimbolDigraph.h#ifndef __SYMBOL_DIGRAPH_H__#define __S原创 2015-12-06 15:34:40 · 530 阅读 · 0 评论 -
有向图(6)--计算强连通分量的Kosaraju算法
Kosaraju算法1.在给定的一幅有向图G中,使用DepthFirstOrder来计算他的反向图R的逆后序排列2.在G中进行标准的深度优先搜索,但是要按照刚才计算得到的顺序而非标准的顺序来访问所有未被标记的顶点3.在构造函数中,所有在同一个递归dfs()调用中被访问到的顶点都在同一个强连通分量中#ifndef __KOSARAJU_SCC_H__#define __KOSARA原创 2015-12-06 23:17:37 · 828 阅读 · 0 评论 -
求解强连通分量算法之---Kosaraju算法
本文提纲:问题描述Kosaraju 算法问题描述:什么是强连通分量(StronglyConnected Component)(或者,被称为强连通子图,Strongly Connected Subgraph)?首先需要明白的是,强连通分量只可能存在于有向图中,无向图中是不存在强连通分量的,当然,无向图中也有对应物,被称为连通分量转载 2015-12-07 16:20:31 · 940 阅读 · 0 评论 -
有向图(7)--再谈可达性&&有向图总结
顶点对的可达性。给定一幅有向图,回答“是否存在一条从一个给定的顶点v到另一个给定的顶点w的路径?”等类似问题。可以使用深度搜索来实现,无论对于稀疏还是稠密的图,它都是理想的解决方案,但它不适用于在实际应用中可能遇到的大型有向图,因为所需的空间和V²成正比,所需时间和V(V+E)成正比。-TransitiveClosure.h#ifndef __TRANSITIVE_CLOSURE_H_原创 2015-12-07 17:33:46 · 996 阅读 · 0 评论 -
最小生成树的Prim算法的延时实现和即时实现
Prim算法,每次总是将下一条连接树中的顶点与不在树中的顶点且权重最小的边加入树中。Prim算法能够得到任意加权连通图的最小生成树。数据结构:顶点:使用一个布尔数组marked来表示顶点是否在最小生成树中边:一条队列mst来保存最小生成树的边横切边:用优先队列pq来根据权重比较所有的边重点:每当我们向最小生成树中添加了一条边之后,也向树中添加了一个顶点。要维护一个包含所有横原创 2015-12-16 13:20:02 · 1114 阅读 · 0 评论 -
最小生成树的Kruskal算法
Kruskal算法的主要思想是按照边的权重顺序(从小到大)处理他们,将边加入最小生成树中,加入的边不会和已经加入的边构成环,直到树中含有V-1条边为止。Kruskal算法能够计算任意加权连通图的最小生成树。数据结构:用优先队列来对边按照权重排序用并查集(之前博客里提到过的union-find)来识别会形成环的边用链表来保存最小生成树的所有边时间复杂度ElgE-UF.h原创 2015-12-16 20:37:13 · 468 阅读 · 0 评论 -
堆排序
依旧是作业,这几天写了好多次堆排序了 ,随便放一个上来#include #include #include using namespace std;template >void sink(T* arr, int pos, int last) { int son; while (pos * 2 <= last) { son = pos * 2; if (son != l原创 2015-12-04 16:21:36 · 286 阅读 · 0 评论 -
普通二叉树C++实现
数据结构作业- -没啥好说的-BinaryTree.h#ifndef __BIANRY_TREE_H__#define __BINARY_TREE_H__#include #include template struct BinTreeNode { T data; BinTreeNode* left; BinTreeNode* right; BinTreeNode(原创 2015-12-03 22:59:43 · 676 阅读 · 0 评论 -
AVL树C++实现
用C++实现的AVL树代码和解释#ifndef __AVL_TREE_H__#define __AVL_TREE_H__#include "stdafx.h"stdafx.h里面有#include #include 下面是节点template struct AVLTreeNode { T key; int height; AVLTreeNode* left; AV原创 2015-11-20 00:10:22 · 1397 阅读 · 0 评论 -
C++控制台循环链表实现贪吃蛇
-stdafx.h 为了简化程序定义一些宏和全局变量#ifndef __STDAFX_H__#define __STDAFX_H__// ============上下左右=============const int UP = 72;const int DOWN = 80;const int LEFT = 75;const int RIGHT = 77;// =========原创 2015-11-21 14:46:51 · 1458 阅读 · 0 评论 -
苏州OJ c001: 合并同类项
内容:【问题描述】给出两个多项式y1和y2,请你合并同类项。【输入】输入数据共两行,每行代表一个多项式。每个多项式按如下形式给出:a1 b1 a2 b2 … ai bi … an bn其中a1~an均为整数,表示此多项式n项的系数,b1~bn均为整数,表示此多项式n项的指数。数字与数字之间用一个空格隔开,最后一个数字之后没有空格。【输出】输出数据仅一行,表示原创 2015-11-21 15:11:53 · 998 阅读 · 2 评论 -
苏州OJ c002: 双向约瑟夫
内容:【问题描述】有n个人围坐在一个圆桌周围,把这n个人依次编号为1~n。从编号为1的人开始顺时针报数,报到m1的人出列;然后逆时针方向报数,报到m2的人出列。问最后谁出列?【输入】输入数据仅一行,包含三个用空格隔开的正整数n,m1和m2。【输出】数据数据仅一行,包含一个正整数k,即最后一个人的序号。【样例】输入10 5 7输出6看到原创 2015-11-22 12:30:54 · 793 阅读 · 0 评论 -
苏州OJ c003: 中缀转后缀
内容:【问题描述】请编写程序将一个中缀表达式转换为后缀表达式。【输入】仅一行,是一个中缀表达式。输入的符号中只有这些基本符号“0123456789+-*/()”,并且不会出现形如2*-3的格式,所有数字都是个位数,“/”表示整除运算。【输出】仅一行,是转换后的后缀表达式。数字之间、运算符之间、数字和运算符之间都用一个空格隔开(参见样例)。【样例】ex3.in原创 2015-11-22 13:45:04 · 688 阅读 · 0 评论 -
苏州OJ c004: 模拟队列
内容:【问题描述】请设计一个程序模拟队列,具备初始队列、入队、出队、输出队列数据的功能。【输入】输入由若干行组成,每行表示一种操作。每行由一个或两个整数组成,其中第一个整数代表操作的类型:1表示初始队列操作,2表示入队操作,3表示出队操作、4表示输出队列信息,第二个整数表示操作所涉及的数据。初始队列操作:将队列置为空并重新设置队列容量。该行第二个整数设为队列的容量。原创 2015-11-22 14:18:46 · 932 阅读 · 0 评论 -
苏州OJ c005: 二叉树遍历
【问题描述】 小明学完了树的基本知识,想做二叉树遍历的程序设计练习.根据二叉树的深度从数据文件中读入n个整数生成顺序存储的二叉树,做各种遍历的输出。小明发现输出的数据中有不少重复的,为此他先将重复的数据过滤掉,然后再生成二叉树的结构。现在要求你从数据文件中读取若干个整数,生成一个满二叉树,然后输出一个二叉树遍历的序列。【输入】 输入文件bintree.in包含2行; 第一行是原创 2015-11-22 15:50:44 · 1120 阅读 · 0 评论 -
C++伸展树自顶向下实现
伸展树的三种旋转:单旋转,一字型旋转,之字形旋转为了简化程序,将之字形旋转转变为如下旋转方式:-SplayTree.h 代码:/* * by: peige * 2015/11/29 */#ifndef __SPLAY_TREE_H__#define __SPLAY_TREE_H__#include template struct SplayT原创 2015-11-29 11:12:04 · 971 阅读 · 0 评论 -
哈夫曼树C++实现
哈夫曼树的介绍Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 这个定义里面涉及到了几个陌生的概念,下面就是一颗哈夫曼树,我们来看图解答。(01) 路径和路径长度定义:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径原创 2015-11-30 17:08:34 · 8917 阅读 · 0 评论 -
c009: 图的概念
内容:图的概念题目描述:假设用一个n*n的数组a来描述一个有向图的邻接矩阵:(1)编写一个函数确定一个顶点的出度(2)编写一个函数确定一个顶点的入度(3)编写一个函数确定图中边的数目输入文件(tgn.input):第一行:节点总数n、指定节点m下面n行:有向图的邻接矩阵输出文件(tgn.output):第一行包括三个数据:节点编号m、m的出度、m的入原创 2015-12-01 19:23:10 · 1440 阅读 · 0 评论 -
b001-删数问题
内容: 键盘输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。输入说明: ns输出说明: 最后剩下的最小数输入样例:help178543 4 输出样例 :13这道题的思路是:一开始判断前s+1位数字,找到原创 2015-12-01 21:25:52 · 448 阅读 · 0 评论 -
SparseArray的使用及实现原理
转载自:http://extremej.itscoder.com/sparsearray_source_analyse/序言相信大家都用过HashMap用来存放键值对,最近在项目中使用HashMap的时候发现,有时候 IDE 会提示我这里的HashMap可以用SparseArray或者SparseIntArray等等来代替。细心的朋友可能也发现了这个提示,并且会发现并不是所有的转载 2017-12-22 11:52:15 · 10474 阅读 · 0 评论