zoukankan      html  css  js  c++  java
  • 判断无向图两点间是否存在长度为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 }
  • 相关阅读:
    Linux 修改 root密码
    python实现 CI/CD(jenkins+gitlab)
    redis集群
    土木工程材料0732
    C语言程序设计【1032】
    汽车文化【1196】
    应用写作0045
    思想道德修养与法律基础[1053]
    英语【0002】
    社区管理【0272】
  • 原文地址:https://www.cnblogs.com/TianyuSu/p/9245455.html
Copyright © 2011-2022 走看看