随笔分类 - AlgorithmAndDS
摘要:欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。判断欧拉路是否存在的方法 有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。 无向图:图连通...
阅读全文
摘要:一.概念 由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。二.拓扑排序方法如下: (1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它. (2)从网中删去该顶点,并且删去从该顶点发出的全部有向边. (3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.三.算法实现 1.普通实现 1 #include<iostream> 2 #include<stdlib.h> 3 #include<stdio.h> 4 #define MAX 100 5 using namespace std; 6 7 void toposort(i
阅读全文
摘要:方法一:基于快排 1 /* 2 基于区间快排的第K小算法 ,输出a[k-1]即可,O(n*logn);每次只对后半部分递归便可把复杂度降到O(n) 3 主要思路是每次随机在数组中选取一个元素p,利用这个元素将数组分成两部分,比p小的元素在分好的数组左边,p和比p大的元素在数组右边, 4 根据k值选...
阅读全文
摘要:一个数组a[0...n-1],求a[j]-a[i]的最大值,其中i<j。 cite:http://mars914.iteye.com/blog/1667259第一种方法: 从左往右求下标0到 k - 1 的最小值MIN 从右往左求 下标k到n -1 的最大值MAX,对于每个k都有一个MAX ...
阅读全文
摘要:[题目描述] 有一个n*n的迷宫,每个方格里都有着相应的数字。你从左上角出发,每次可以向上下左右四个方向最多(注意是最多,不是必须)移动k格,并且要求你每次到达的方格里的数字必须大于上一次所在方格的数字。现在要求你走过的方格的所有数之和最大,问这个最大和是多少。[输入] 输入数据第一行为两个正整数N...
阅读全文
摘要:1 //正序打印自然数 0 -9 2 #include 3 #include 4 using namespace std; 5 6 void fun(int begin,int end) 7 { 8 cout 25 #include 26 using namesp...
阅读全文
摘要:1 /* 2 本题满分: 9分 3 4 填空1: (3分) 5 n==0 6 或者:0==n 7 8 填空2: (6分) 9 f(n-i*i, a, idx+1)10 或者:11 f(n-i*i, a, idx+1) > 012 f(n-i*i, a, i...
阅读全文
摘要:1 #include 2 #include 3 #include 4 5 int **matrix; 6 int value = 1; 7 8 void recursion (int row, int col, int len) // row, ...
阅读全文
摘要:个人总结一下:总的来说,可以用DFS(O(v^2))和BFS(O(v+e))的思想都能实现,只要从一个点出发,然后判断是否能遍历完所有的点。还有就是Tarjan算法和GABOW算法,这个没研究过,据说很好用。实现办法一:用Floyd算法,时间复杂度为O(v^3),时间复杂度较大。实现办法二:拓扑排序...
阅读全文