c_cpp 如果来自源的路径长度超过k

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 如果来自源的路径长度超过k相关的知识,希望对你有一定的参考价值。

//https://www.geeksforgeeks.org/find-if-there-is-a-path-of-more-than-k-length-from-a-source/
#include <bits/stdc++.h>
using namespace std;

class graph {
    int v;
    list < pair<int,int> > *adj;
public:
    graph (int v) {
        this->v= v;
        adj= new list < pair<int,int> > [v];
    }
    void addEdge (int u, int w, int x) {
        adj[u].push_back(make_pair(w,x));
        adj[w].push_back(make_pair(u,x));
    }
    bool dfs (int ,bool [], int );
};

bool graph::dfs (int s, bool visited[], int k) {
    if (k<=0)
        return 1;

    visited[s]= 1;
    list < pair<int,int> >::iterator i;
    for (i= adj[s].begin(); i!= adj[s].end(); ++i) {
        int w= (*i).first;
        int x= (*i).second;
        if (visited[w])
            continue;
        if (x>=k)
            return 1;
        if (!visited[w] && dfs(w, visited, k-x))
            return 1;
    }
    visited[s]= 0;
    return 0;

}

int main() {
    graph g(9);
    g.addEdge(0, 1, 4);
    g.addEdge(0, 7, 8);
    g.addEdge(1, 2, 8);
    g.addEdge(1, 7, 11);
    g.addEdge(2, 3, 7);
    g.addEdge(2, 8, 2);
    g.addEdge(2, 5, 4);
    g.addEdge(3, 4, 9);
    g.addEdge(3, 5, 14);
    g.addEdge(4, 5, 10);
    g.addEdge(5, 6, 2);
    g.addEdge(6, 7, 1);
    g.addEdge(6, 8, 6);
    g.addEdge(7, 8, 7);


    bool visited[9]= {0};
    if (g.dfs(0,visited, 62))
        cout<< "Possible!";
    else
        cout<< "Not Possible!";
}

以上是关于c_cpp 如果来自源的路径长度超过k的主要内容,如果未能解决你的问题,请参考以下文章

Acwing 252. 树

CF

Floyd/Warshall Algorithm mod 在最大长度 k 处找到最便宜的路径

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

图中具有特定长度的顶点不相交路径

CSU 1660 K-Cycle(dfs判断无向图中是否存在长度为K的环)