已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
3天前关闭。
这篇文章是编辑并提交审查3天前.
Improve this question
给定一个有向图,在图中找到一个母顶点(如果存在)。母顶点是一个顶点,通过它我们可以到达图的所有其他顶点。
下面是调用者函数
int findMotherVertex(int V, vector<int>adj[])
{
int count = 0;
for(int i=0; i<V; i++){
vector<bool> vis(V, 0);
dfs(i, adj, vis, count);
if(count == V){
return i;
}
else{
count = 0;
}
}
return -1;
}
为什么这个dfs函数在GeeksForGeeks上给出TLE(Time Limit Exceeded)?
void dfs(int u, vector<int> adj[], vector<bool> &vis, int &count){
vis[u] = 1;
for(int v : adj[u]){
if(!vis[v]){
dfs(v, adj, vis, count);
}
}
count++;
}
而这个dfs函数就没有吗?
void dfs(int u, vector<int> adj[], vector<bool> &vis, int &count){
vis[u] = 1;
count++;
for(int v : adj[u]){
if(!vis[v]){
dfs(v, adj, vis, count);
}
}
}
1条答案
按热度按时间rqmkfv5c1#
当且仅当你的图是一棵树时,“母”节点存在。通常这个节点被称为树的根。
检查图是否为单树并找到根的算法:
不可能更具体,因为你的问题缺乏太多细节(这就是为什么它被否决)。但是,请注意,您所关心的只是节点的入度。因此,当扫描输入时,不要使用邻接矩阵或任何通常的图形数据结构。您只需要两个向量,一个用于节点ID,另一个用于节点入度。当你找到一个新的节点时,将它添加到向量中。当你找到一个新的链接时,增加目标节点的入度向量。