离散 图论
文章平均质量分 74
紫云的博客
just go
展开
-
计算传递闭包
//沃舍尔算法计算传递闭包//warshall://W=M//for k=1 to n//begin// for i=1 to n// begin// for j=1 to n// W(ij)=W(ij)+(W(ik)*W(kj))// end//end////#include using namespace std;int v,edge;int*原创 2014-01-25 16:14:47 · 6047 阅读 · 0 评论 -
关键路径_AOE_基于邻接表
//AOE_求关键路径_基于邻接表//首先用正向邻接表求出每个活动的最早发生时间// 用逆向邻接表求出每个活动的最迟发生时间//再两者对应相减,为0即为活动的关键活动////大纲:删除无前继结点的顶点 // //输入: // 先确定顶点数和边数 // 分为头结点和值结点,头结点含有count,用于计数这个结点当前含有的前继 ////求出每个活动的最早发原创 2014-02-28 22:07:46 · 2590 阅读 · 0 评论 -
二叉树的层序遍历
//层序遍历:/*------------------------------------------------------------------------- 1.使用队列, 2.只要有儿子,就进,先左儿子或右儿子都ok 3.进完儿子后,就调用对头元素,输出它,并让其儿子进队列 4.当队列为空时候,就扫描完毕了*///-------------------原创 2014-01-28 11:14:47 · 1476 阅读 · 0 评论 -
赫夫曼编码
//赫夫曼编码//procedure Huffman(c:具有频率wi的符号ai,i=1,2,3。。。n)//F=n个根树的森林,每个根树由单个顶点ai组成并且赋权wi// while F不是树// begin// 把F中满足w(T)>=w(T')的权最小的根树T和T'换成具有新树根的一个树// 这个树根以T作为左子树,T'作为右子树// 用0标记树根到T的新边,并且用原创 2014-01-12 20:16:13 · 1193 阅读 · 0 评论 -
欧拉回路
//首先构造图,再判断它是不是欧拉回路图,若是,则输入回路//小回路汇总成最终回路#include using namespace std; //012345分别表示v0 v1...... int v;//////点数目 int edge;///边数目 int** draw();//绘图 void huilu(int **a,int go);//处理原创 2014-01-10 21:41:29 · 652 阅读 · 0 评论 -
表达树
(2+3*4+5)*(2+3)2+3*4+5*2+3234*5++23+*Press any key to continue2*(4*(2+3))*4+2+1+(3-1)/22*4*2+3*4+2+1+3-1/22423+*4**2131-2/+++Press any key to continue//算法//先获取字符串每一个字符对应的优先级//+原创 2014-01-11 22:04:24 · 1619 阅读 · 0 评论 -
后序遍历非递归3种算法
//非递归后序遍历://-------------------------------------------------------------------------//(不会破坏树)// 有左儿子进,无左二子调用右儿子// 无左右儿子或左右儿子均被访问过了,出栈并输出//------------------------------------------------------原创 2014-01-28 10:24:56 · 4625 阅读 · 1 评论 -
拓扑排序_基于邻接表
//拓扑排序_基于邻接表//大纲:删除无前继结点的顶点////输入:// 先确定顶点数和边数// 分为头结点和值结点,头结点含有count,用于计数这个结点当前含有的前继////输出拓扑排序:// 使用栈记录count为0的结点,栈空时结束// 当count--后为0,说明这个结点的前继处理完了,把这个结点放入栈里// 最后若还有值结点存在,说明存在环了///原创 2014-02-23 18:08:38 · 3236 阅读 · 0 评论 -
前中后序非递归遍历算法
//以下均是模拟系统调用机制//非递归前序遍历:// 进栈的同时输出// 有左儿子进,无左二子出栈// 出栈时调用右儿子,进栈调左儿子////非递归中序遍历:// 有左儿子进,无左二子出栈// 出栈时输出 and 调右儿子// 进栈调左儿子////非递归后序遍历:// 有左儿子进,无左二子调用右儿子// 无左右儿子或左右儿子均被访问过了,出栈并输出原创 2014-01-27 20:43:25 · 12569 阅读 · 0 评论 -
关键路径(1)
http://blog.csdn.net/h1023417614/article/details/17881187这个网址的代码是求某点的到另一个点的最短路径。而关键路径求的是最长路径。只要把上个网址的代码稍微改改即可 for ( i = 0; i { cin>>spot1>>spot2>>len;原创 2014-02-25 17:26:09 · 830 阅读 · 0 评论 -
拓扑排序_基于邻接矩阵
人们用一种有向图来表示这些工程、计划等,在这种有向图中,顶点表示活动,有向边表示活动的优先关系,这种用顶点表示活动,用弧来表示活动间的优先关系的有向图叫做顶点表示活动的网络(Actire On Vertices)简称为AOV网。在AOV网中不应该出现有向环。 通常,在AOV网中,将所有活动排列成一个拓扑序列的过程叫做拓扑排序(Topological Sort)。 、、从有向图中选择一个没有前原创 2014-01-25 16:09:48 · 3395 阅读 · 0 评论 -
深度优先搜索_基于邻接矩阵
//深度优先搜索算法//procedure DFS(G:带顶点v1,...vn的连通图)//T:=只包含顶点v1的树//visit(v1)//------------------------------------////procedure visit(v:G的顶点)//for 与v相邻并且还不在T中的每个顶点w//begin// 加入顶点w和边{v,w}到T// visit原创 2014-01-12 11:19:43 · 719 阅读 · 0 评论 -
弗洛伊德变种算法计算最短路径
这个算法和Dijkstra算法的区别在于;Dijkstra算法适用于大图,它能够指定到达某个点即停止计算;而这个算法则一般不能用于大图(时间过长),因为它必然是n的2次方次运算。两个算法都是计算某一个点到其他各点的最短通路弗洛伊德算法则是计算所有顶点对之间最短通路的长度//弗洛伊德变种算法计算最短通路(更改,使其计算v0点到各点的最短通路)// procedure Floyd(G:带权原创 2014-01-26 13:49:12 · 4038 阅读 · 0 评论 -
图的最短路径-升级版
//这个版本使用了huilu数组存放这个点的前一个合理点;//while( no_s(v-1,s) )//当所求的点不在s中,这语句严格来说是求点(v-1)这个点到始点的路径//for(i=0;i//前两句也适应前版本///粘贴输入下列4 40 1 10 3 10 2 32 3 4#include using namespace std;//0123原创 2014-01-05 11:44:18 · 836 阅读 · 0 评论 -
弗洛伊德算法计算所有顶点对之间最短通路的长度
//弗洛伊德算法计算所有顶点对之间最短通路的长度// procedure Floyd(G:带权简单图)// {G有顶点v1.v2....vn和权}// for i= 1 to n/// for j= 1 to n// d(vi,vj)=w(i,j)//// for i= 1 to n/// for j= 1 to n// for k= 1 to n//原创 2014-01-26 13:46:00 · 2855 阅读 · 0 评论 -
再谈图的最短路径
前两个关于图的最短路径的博文中,均忽略了图是连通分图的情况。在查找两个不连通的点时,当使用(while(...))会出现死循环的情况;可在while{}里加入一个标志变量,用于适时退出循环!原创 2014-01-08 21:13:16 · 610 阅读 · 0 评论 -
图的最短路径
这里有三个版本,前面的最好,再次之,再次之。每个点有个数据包,数据包里放的是这个点到到始的length和这个length所对路径4 40 1 10 3 80 2 32 3 432767 1 3 81 32767 32767 327673 32767 32767 48 32767 4 327670->01->012->023->023Pre原创 2014-01-04 21:28:05 · 861 阅读 · 0 评论 -
广度优先搜索_基于邻接矩阵
ye!原创 2014-01-12 11:21:15 · 2014 阅读 · 0 评论 -
广度优先搜索算法_基于邻接表
//广度优先搜索算法_基于邻接表//procedure BFS(G:带顶点v1,...vn的连通图)//T:=只包含顶点v1的树//L:=空表//把v1放入尚未处理顶点的表L中//------------------------------------////while L非空//begin// 删除L中第一个顶点v// for v的每个邻居w// if w既不在L中原创 2014-01-27 11:42:28 · 2359 阅读 · 0 评论 -
给条件语句加上括号
//for循环里定义的变量会在函数里保留////////////////////////////细分的情况有很多种//空出所需的空格,以便加上括号,再消去空格#include #include #include #include int panduan(char *buff,int len);//可以加括号返回1否则0int four(char c);//是那4个联结词就返回1原创 2014-10-17 11:13:52 · 1347 阅读 · 0 评论