扩大路径法与极大路径

极大路径定义

设P = v0v1…vk
无向图极大路径性质:
(1) P的顶点和边都不重复
(2) 起点v0和终点vk所有关联边的端点都在路径P上

有向图极大路径性质
(1) P的顶点和边都不重复的路径
(2) 起点v0的前驱顶点和终点vk的后继顶点都在路径P上

北大离散数学教材p121页对于极大路径的定义
在这里插入图片描述

扩大路径法

无向图的极大路径

FIND-MAXIMUM-PATH(G) //求无向图G的极大路径
	P = v0e1v1 //初始化
	u = v0;
	v = v1;
	visited[u] = true;
	visited[v] = true;
	//对路径起点u扩展
	while(itr[u].hasNext()) {//对路径起点u扩展
		e = itr[u].next();//获取顶点u的下一条关联边
		w = e.v;//(w, u) = (u, w)
		if(!visited[w]) {
			visited[w] = ture;
			P = weP
			u = w;//记录路径P的起点,继续下一次迭代
		}
	}	
	
	//对路径终点v扩展
	while(itr[v].hasNext()) {//对路径起点v扩展
		e = itr[v].next();//获取顶点v的下一条关联边
		w = e.v;//(v, w)
		if(!visited[w]) {
			visited[w] = ture;
			P = Pew
			v = w;//更新路径P的起点,继续下一次迭代
		}
	}		
	return P //P是无向图G的一条极大路径

有向图的极大路径

FIND-MAXIMUM-PATH(G) //求有向图G的极大路径
	P = v0e1v1 //初始化
	u = v0;
	v = v1;
	visited[u] = true;
	visited[v] = true;
	//对路径终点v扩展
	while(itr[v].hasNext()) {//对路径起点v扩展
		e = itr[v].next();//获取顶点v的下一条出边
		w = e.v;//有向边<v, w>
		if(!visited[w]) {
			visited[w] = ture;
			P = Pew
			v = w;//更新路径P的起点,继续下一次迭代
		}
	}
	
	//对路径起点u扩展
	//计算有向图G的逆邻接表reverseAdjList[G]
	//终点u的入边迭代器revItr[u]
	while(revItr[u].hasNext()) {//对路径起点u扩展
		e = itr[u].next();//获取顶点u的下一条入边
		w = e.v;//有向边<w, u>
		if(!visited[w]) {
			visited[w] = ture;
			P = weP
			u = w;//记录路径P的起点,继续下一次迭代
		}
	}	
		
	return P //P是无向图G的一条极大路径

总结

使用扩大路径法可以在线性时间O(V + E)找出一条极大路径P,设 P = v0v1v2…vk, 再使用极大路径的性质证明图论中的一些定理。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值