题目描述
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode*b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。
/*
struct UndirectedGraphNode {
int label;
vector<struct UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {}
};*/
class Path {
public:
bool dfs(UndirectedGraphNode*a, UndirectedGraphNode* target, map<UndirectedGraphNode*,bool>& m ){
if(m[a])
return false;
m[a] = true;
if(a==target) return true;
for(int i = 0; i < a->neighbors.size(); ++i){
if(dfs(a->neighbors[i],target,m))
return true;
}
return false;
}
bool checkPath(UndirectedGraphNode* a, UndirectedGraphNode* b) {
// write code here
map<UndirectedGraphNode*,bool> m;
bool t = dfs(a,b,m);
m.clear();
return t||dfs(b,a,m);
}
};