c++ 使用DFS查找母顶点[已关闭]

iugsix8n  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(133)

已关闭,此问题需要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);
        }
    }
}
rqmkfv5c

rqmkfv5c1#

当且仅当你的图是一棵树时,“母”节点存在。通常这个节点被称为树的根。
检查图是否为单树并找到根的算法:

  • SET R NULL
  • SET发现错误
  • 节点上的循环N
  • 如果N的入度为0
  • 如果发现为真,则停止“图不是单个树”
  • SET发现为真
  • 将R设置为N
  • 如果发现为假
  • STOP“图不是单树”
  • “STOP”图是根为R的单树

不可能更具体,因为你的问题缺乏太多细节(这就是为什么它被否决)。但是,请注意,您所关心的只是节点的入度。因此,当扫描输入时,不要使用邻接矩阵或任何通常的图形数据结构。您只需要两个向量,一个用于节点ID,另一个用于节点入度。当你找到一个新的节点时,将它添加到向量中。当你找到一个新的链接时,增加目标节点的入度向量。

相关问题