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的环)