摘要:
首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应。 这个问题既可以利用最大流算法解决也可以用匈牙利算法解决。如果用最大流算法中的Edmonds-karp算法解决,因为时间复杂度为O(n*m*m),n为点数,m为边数,会超时,利用匈牙利算法,时间复杂度为O(n*m),时间复杂度小,不会超时。 其实匈牙利算法就是最大流算法,只不过它的使用范围仅限于二分图,所以可以称之为“二分图定制版的最大流算法”,既然是定制的,那么他就会考虑到二分图的特殊性,优化原来的最大流算法,降低时间复杂度,同时也变得有点复杂不. 阅读全文
摘要:
题意:给定若干个发电站及其发电量和若干中间传输节点和若干消费者及其消费量,以及节点之间传输的容量限制,求从发电站到消费者最大的传输电量。 思路:典型的最大流问题,由于有多个发电站和多个消费者,不妨构建一个超级发电站和一个超级消费者。即将超级发电站与各个发电站相连,连接的容量即为各个发电站的发电量,将各个消费者与超级消费者相连,连接的容量即为各个消费者的消费量。 例如数据: 7 2 3 13 ... 阅读全文
摘要:
转自 http://www.cnblogs.com/yezhenhan/archive/2012/09/10/2678690.htmlimport java.io.File; import java.io.FileOutputStream; import java.io.*; public class FileTest { public FileTest() { } public static void main(String[] args) { FileOutputStream out = null; F... 阅读全文
摘要:
总的来说还比较顺利,因为网上已经有很多教程。呼呼~记一下自己遇到的问题和解决方法(多谢前辈们的帖和文啦)。转自http://blog.tianya.cn/blogger/post_read.asp?BlogID=2888395&PostID=30920127 1、首先下载ns-allinone-2.34.tar.gz。地址http://download.csdn.net/detail/yin_zhi_yuan/4647124 2、按照[1]的步骤,先更新了一下系统。在终端输入: sudo apt-get update #更新源列表 sudo apt-get upgrade #更新已安装 阅读全文
摘要:
(二叉)堆是一种特殊的数据结构.:(二叉)堆数据结构是一种数组对象,它可以被视为一种完全二叉树:树中的每个节点与数组中存放该节点值的那个元素对应。树的每一层都是填满的,最后一层除外.:(二叉)堆的用途很广,例如典型的运用--优先队列|堆排序{速度比快速排序慢,比插入排序块O(nlg(n))}:下面我用一个比较通俗易懂的程序以及相关图解来演示一下如何建堆,如何利用堆进行排序小贴士:*读者如果细细品味,能发现堆排序就是在利用优先队列进行排序, *另外优先队列在dijkstra算法与A*算法中具有十分重要的应用 *所以只有先弄懂了(二叉)堆才能知道优先队列的工作原理,然后才能更加游刃有余的实现... 阅读全文
摘要:
邻接表建图法1极大的节省了空间和时间 是建图非常棒的一种方式它利用数组模拟出边与边之间的关系 图示解析(数据为代码中的测试数据): 1 #include<iostream> 2 #define Maxn 200 3 usingnamespace std; 4 struct edge{int from,to,weight,next;}e[Maxn];//存储边信息的结构体 5 int first[Maxn];//起点为下标存储(e中边的位置) 6 int main() 7 { 8 int edges;//边数 9 memset(first,-1,sizeof(first));10 . 阅读全文
摘要:
八皇后问题八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使 其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可 以解决此问题。摘自百度百科解题思路:深度搜索加记忆数组*因为皇后不能处于同一行,同一列,同一斜线(即主对角线和副对角线),所以可以判断出8个皇后分别各占一行*不妨假设从第一行开始,行数依次加一确定每一行皇后的位置 阅读全文
摘要:
拓扑排序与有向无环图的判断:拓扑排序:把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面。 总结: 拓扑排序只在有向无环图中有效:如果输入的有向图中的点,不存在入度为0的点,则该有向图存在回路,反过来则不成立:如果存在的入度为0的点大于一个,则该有向图肯定不存在一个可以确定的拓扑序列但并不妨碍拓扑排序 ----------------------------------------------------------------------------------------------------------------------------------------- 阅读全文
摘要:
dijkstra,Bellman_Ford,Floyd算法的比较::Dijkstra算法,图所有边权值都为非负的;:Bellman_Ford算法,图中所有边权值可以存在负值,但是不能存在原点可达的负权回路,如果存在负权回路,该算法可以给出判断;:Floyd算法,不允许所有权值为负的回路,可以求出任意两点间的最短距离,而Dijkstra和Bellman_Ford算法只可以求出任意点到达源点的最短距离;:Dijkstra算法的思想是贪心,Bellman_Ford和Floyd算法的思想是动态规划:三者:图中都可以出现正权回路Bellman_Ford算法实现时间复杂度O(nm) 1 #define I 阅读全文
摘要:
欧拉回路:包含图G的每一条边的回路欧拉图:含有欧拉回路的图欧拉半图:含有欧拉道路的图欧拉回路与欧拉道路的关系如果欧拉道路的起点与终点重合,那么这条欧拉道路是欧拉回路定理:无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数);:无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点;:有向连通图D是欧拉图,当且仅当D中每个结点的入度=出度:有向连通图D含有欧拉通路,当且仅当D中除两个结点起点s终点t外,其余每个结点的入度=出度,(起点s的入读=出度+1,终点t的出度=入度+1 或两个点的入读=出度)有向图在考虑图的连通性的时候应去除边的方向性无向图输出欧拉路或回路的方法 阅读全文