判断无向图两点间是否存在长度为K的路径

Posted tianyusu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断无向图两点间是否存在长度为K的路径相关的知识,希望对你有一定的参考价值。

 1 #include <iostream>
 2 #include <vector>
 3 #define MAXN  5
 4 using namespace std;
 5 
 6 struct edge
 7 {
 8     int f,t;
 9     edge(int f, int t) :f(f), t(t) {}
10 };
11 
12 vector<edge> edges;
13 vector<int> G[MAXN+1];
14 bool vis[MAXN+1];
15 
16 void init(){
17     for (int i = 1; i <= MAXN; i++)
18         vis[i] = false;
19 }
20 
21 
22 //通过缩短路径方法求解
23 bool search_k_path(int begin,int end,int k){
24     if(begin==end && k==0) return true;
25     //当要求的K大于 i 到 j 的长度,当 I ==J 时,k<0
26     if(k>0){
27         vis[begin] = true;
28         for(int i=0;i<G[begin].size();i++){
29             if(!vis[edges[G[begin][i]].t]) 
30                 return search_k_path(edges[G[begin][i]].t,end,k-1);
31         }
32         vis[begin] = false;
33     }
34     return false;
35 }
36 
37 
38 
39 int main(int argc, char const *argv[])
40 {
41     //input data
42 
43     int s,e;
44     for(int i= 0 ;i<7;i++){
45         cin>>s>>e;
46         edges.push_back(edge(s,e));
47         G[s].push_back(edges.size()-1);
48         edges.push_back(edge(e,s));
49         G[e].push_back(edges.size()-1);
50     }    
51     init();
52     cout <<search_k_path(1,5,2)<<endl;
53 
54     return 0;
55 }

 

以上是关于判断无向图两点间是否存在长度为K的路径的主要内容,如果未能解决你的问题,请参考以下文章

基于邻接表的长度为k的简单路径的求解

如何求有向图两点间的所有路径

是否有一种算法可以在无向图中找到成本最高的长度为 k 的路径

数据结构(C语言版) 图 算法设计Demo5

[bzoj1614]: [Usaco2007 Jan]Telephone Lines架设电话线

Tarjan求点双连通分量