图论经典定义及寻迹算法
来源:互联网 发布:你难忘的事情 知乎 编辑:程序博客网 时间:2024/05/20 13:39
(1)定义
欧拉通路 (欧拉迹)—通过图中每条边一次且仅一次,并且过每一顶点的通路。
欧拉回路 (欧拉闭迹)—通过图中每条边一次且仅一次,并且过每一顶点的回路。
欧拉图—存在欧拉回路的图。欧拉图就是从一顶出发每条边恰通过一次又能回到出发顶点的那种图,即不重复的行遍所有的边再回到出发点。
通路和回路-称vie1e2…envj为一条从 vi到 vj且长度为n的通路,其中长度是指通路中边的条数.称起点和终点相同的通路为一条回路。
简单图-不含平行边和自回路的图。
混合图-既有有向边,也有无向边的图
平凡图-仅有一个结点的图
完全图-有n个结点的且每对结点都有边相连的无向简单图,称为无向完全图;有n个结点的且每对结点之间都有两条方向相反的边相连的有向简单图为有向完全图。
(2)欧拉图的特征:
无向图
a)G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点)。
b)G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点。
有向图
a)D有欧拉通路:D连通,除两个顶点外,其余顶点的入度均等于出度,这两个特殊的顶点中,一个顶点的入度比出度大1,另一个顶点的入度比出度小1。
b)D有欧拉回路(D为欧拉图):D连通,D中所有顶点的入度等于出度。一个有向图是欧拉图,当且仅当该图所有顶点度数都是0。
Fleury算法:
任取v0∈V(G),令P0=v0;
设Pi=v0e1v1e2…ei vi已经行遍,按下面方法从中选取ei+1:
(a)ei+1与vi相关联;
(b)除非无别的边可供行遍,否则ei+1不应该为Gi=G-{e1,e2, …, ei}中的桥(所谓桥是一条删除后使连通图不再连通的边);
(c)当(b)不能再进行时,算法停止。
可以证明,当算法停止时所得的简单回路Wm=v0e1v1e2….emvm(vm=v0)为G中的一条欧拉回路,复杂度为O(e*e)。,D中所有顶点的入度等于出度。一个有向图是欧拉图,当且仅当该图所有顶点度数都是0。
3、欧拉算法C语言描述
void DFS(Graph &G,SqStack &S,int x,int t)
{
k=0;//一个标志,来标记当前访问的节点是否还有邻接边可供访问
Push(S,x); //将本次遍历边所经由的点入栈
for(i=t;i<v;i++) //v是顶点数,e是边数
if(G[i][x]>0)
{
k=1;
G[i][x]=0; G[x][i]=0; //此边已访问,删除此边
DFS(G,S,i,0);//寻找下一条关联的边,本次找到的是与x关联的i,在
//下一层中将寻找与i关联的边
break;
}//if,for
if(k==0) //如果k=0,说明与当前顶点关联的边已穷尽
{
Pop(S);
GetTop(S,m);
G[x][m]=1;G[m][x]=1;//恢复在上一层中被删除的边
a=x+1;//如果可能的话,从当前节点的下一条关联边开始搜寻
if(StackLength(S)!=e)//继续搜寻,边还没有全部遍历完
{
Pop(S); //还原到上一步去
DFS(G,S,m,a);//
}//if
else //搜寻完毕,将最后节点也入栈
Push(S,x);
}//if
}//DFS
void Euler(Graph &G,int x)
{
//G是存储图的邻接矩阵,都处理成无向图形式,值为1代表有边,0代表无边,不包括自回路,x是出发点
InitStack(S);//用来存放遍历边时依次走过的顶点
DFS(G,S,x,0);//深度优先遍历查找,0是指查询的起点
//输出
while(!StackEmpty(S))
{
GetTop(S,m);
printf("->v%d",m);
Pop(S);
}//while
}//Euler
- 图论经典定义及寻迹算法
- Voronoi(奥洛诺依)图定义及算法
- 经典算法实现及思想
- 递归算法及经典案例
- 经典算法试题及答案
- 算法的定义及算法的复杂度
- 二分图匹配——定义,经典模型以及简单的匈牙利算法
- 栈的数据结构定义及算法
- 队列的数据结构定义及算法
- 排序算法稳定性定义及分析
- ACM经典算法之图论
- 算法及编程方面经典书籍
- 经典的文件拷贝函数及算法
- 经典算法面试题及答案
- 经典排序算法资料及 ruby 实现
- 贪心算法及几个经典例子
- 经典算法面试题及解题思路
- 链表的经典技巧及算法
- MYSQL分库分表总结
- 新的生活
- iOS 深度拷贝
- iOS中如何创建一个滑出式导航面板(2)
- 飞规划局的发货的发货单发
- 图论经典定义及寻迹算法
- $(select).click(function(){})和$(select).click(addComt())
- 点到线段的最短距离
- 安卓手机WIFI调试COCOS2DX APK
- poj2413 java处理Fibonacci数前500位
- 封装一个类搞定90%安卓客户端与服务器端交互
- php CI框架插入一条或多条sql记录示例
- hdu4787 在线ac自动机
- JDBC高级编程——批处理更新