社区
数据结构与算法
帖子详情
请教一个图论算法
haian2442
2007-01-05 11:35:18
在一个无向图中,给出两个点u和v,并且u和v间没有边,求出这两个点间最多的不相交的简单路径数目?
...全文
554
20
打赏
收藏
请教一个图论算法
在一个无向图中,给出两个点u和v,并且u和v间没有边,求出这两个点间最多的不相交的简单路径数目?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lin_programmer
2007-02-28
打赏
举报
回复
一个相似的问题:
给出一组顶点对(ui,vi),如何尽量的把它们连接起来(ui连接vi),并且通路不相交
更实际的问题:
ui,vi是平面上的点,如何用直线段把它们在这个平面上连接起来,通路不相交,并且线段具有宽度
haian2442
2007-02-28
打赏
举报
回复
这个可以用网络流的方法来做。
将这个图中除uv外的节点都分解T成两个节点T1和T2,而T1只继承那些终点为T的边,T2只继承起点为T的边,并且T1和T2间有一条边。这样就会产生一个新的图,并设置每条边的容量为1,这样就可以求出来了
zzwu
2007-01-22
打赏
举报
回复
分2步来求出两点间最多的不相交的简单路径数目:
1.求出两点间所有(不考虑相交不相交)的简单路径;
2.从所有简单路径中,再寻找最大不相交路径子集.
wurenxiao
2007-01-20
打赏
举报
回复
如图:
4----------5
/| /|
/ | / |
0--|-------1 |
| | | |
| 6-------|--7
| / | /
|/ |/
2----------3
求:0 到 1 的路径
#include <iostream.h>
const int MAX = 8;
//建立与图对应的距阵
int num[MAX][MAX]={{1,1,1,0,1,0,0,0}, {1,1,0,1,0,1,0,0},{1,0,1,1,0,0,1,0},
{0,1,1,1,0,0,0,1},{1,0,0,0,1,1,1,0},{0,1,0,0,1,1,0,1},{0,0,1,0,1,0,1,1},
{0,0,0,1,0,1,1,1}};
/**
检测重复循环的可能
*/
bool test(int s[], int length, int key)
{
for(int i=0; i<length; i++)
{
if(s[i] == key)
return false;
}
return true;
}
/**
start:起始点
end:终点
*/
void Search(int start, int end)
{
int top = 0;
int d[MAX]={0};
int s[MAX] = {0};
bool is = true;
d[top] = start;
while(top > -1)
{
is = true;
while(s[d[top]]++ < MAX)
{
if(d[top] != s[d[top]]-1 && num[d[top]][s[d[top]]-1] == 1)
{
if(s[d[top]]-1 == end) //找到输出路径
{
for(int i=0; i<=top; i++)
{
cout<<d[i]<<' ';
}
cout<<end<<endl;
}
else
{
if(test(d, top, s[d[top]]-1))
{
top++;
d[top] = s[d[top-1]]-1;
s[d[top]] = 0;
is = false;
break;
}
}
}
}
if(is == true)
{
top--; //回朔
}
}
}
void main()
{
Search(0,1); //求 0 到 1 的路径
}
输出结果:
0 1
0 2 3 1
0 2 3 7 5 1
0 2 3 7 6 4 5 1
0 2 6 4 5 1
0 2 6 4 5 7 3 1
0 2 6 7 3 1
0 2 6 7 5 1
0 4 5 1
0 4 5 7 3 1
0 4 5 7 6 2 3 1
0 4 6 2 3 1
0 4 6 2 3 7 5 1
0 4 6 7 3 1
0 4 6 7 5 1
Press any key to continue
haian2442
2007-01-20
打赏
举报
回复
bigc:求1-4间长为22时路径
haian2442
2007-01-20
打赏
举报
回复
bigc: 对Google那题我没意识到K可能取很大的情况。但是你的算法在下面的图中可能有问题:
1----2----3----4
/ \ |\
5---6 7--
37为一个长为2的回路,256为一个长为3的回路,那么取k=22时的求解
haian2442
2007-01-20
打赏
举报
回复
zzwu: 3-6间是两条路径
zzwu
2007-01-19
打赏
举报
回复
如果是
5----6
/ /|
/ / |
1----2 |
| | 8
| | /
| |/
3----4
在3-6之间有几个不相交的简单路径数?
bigc2000
2007-01-19
打赏
举报
回复
这个题个人觉得值得关注,希望贴子别掉下去了。
bigc2000
2007-01-19
打赏
举报
回复
To haian2442() ( ) :
当K变得很大时,不现实,最好的探测方式应该是求简单路径数,只要有一条恰好=K-2*n(n〉=0)
haian2442
2007-01-19
打赏
举报
回复
我刚看了些网络流方面的问题,主要针对的是边上的容量,而这个问题可以看成节点的容量。
或者网络流中的还有什么方法来解决这个问题?请赐教
haian2442
2007-01-19
打赏
举报
回复
bigc: u,v之间是否存在一条经过K-1个节点的路径: google的题可以用矩阵运算来求,用求传递闭包的方法来求
bigc2000
2007-01-17
打赏
举报
回复
认为用网络流的朋友们,说说,你们怎么想的?
bigc2000
2007-01-17
打赏
举报
回复
如果这个题很好的解决了,那么
今年google最后一道题目就简单了
请问 u,v之间是否存在一条经过K-1个节点的路径(可以重复)。
ruanzheng13
2007-01-15
打赏
举报
回复
最大流
cjq87
2007-01-05
打赏
举报
回复
每遍历一个元素就打上标记,标记清除之前不再被访问,可以避免“相交”
你说的最优化指什么啊?
haian2442
2007-01-05
打赏
举报
回复
cjq87 : 我也考虑过广度搜索,但是没有一个比较好的方式来解决“不相交”以及最优化这两个限制?你能够说的具体点吗?
cjq87
2007-01-05
打赏
举报
回复
我觉得用广度搜索是很容易实现的
galois_godel
2007-01-05
打赏
举报
回复
网络流吧
haian2442
2007-01-05
打赏
举报
回复
最优化指:最后的不相交路径的数目最多。
如果按照你的方法,那算法的复杂度很高
图论算法
精讲+刷题实战
算法精讲+刷题实战,讲解算法之后,进行刷题实战,详解如何分析问题,设计算法,优化算法和刷题技巧。包括三大模块:图的存储(邻接矩阵、边集数组、邻接表、链式前向星),最短路径(Dijkstra、Floyd、Bellman_Ford...
弗洛伊德(Floyd)算法c++版
弗洛伊德算法其实是一种非常简单的
图论算法
,总的来说,弗洛伊德算法甚至可以说是一种暴力枚举。 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径...
图论算法
给出
一个
图,求其欧拉回路(若没有回路,则求其欧拉路径),若不存在则输出‘No solution’ 输入 输入的第一行为边数F(<=1024),后面F行每行表示一条边(定点标号范围为1-500) 输出 输出一条合法的欧拉...
算法7-1:图论简单介绍
以下这张地图就是无向图的
一个
样例。 OPTEproject OPTEproject的目标就是绘制整个互联网的样子。下图是2010年的互联网。互联网也是无向图的
一个
样例。这张图是用LGL软件进行绘制的。有兴趣的同学可以研究...
Ztxz16学图论
这一天,Zjr506在教导了Ztxz16关于图论方面的一些算法后,给他出了一道图论题作为家庭作业: 给定N个点,M条无向边,Q个询问,每个询问给定L, R,问连上第L~R条边后,图中有多少联通块(询问之间互不影响)。 Ztxz...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章