有向图输出出度为0顶点
时间: 2024-05-06 14:15:59 浏览: 62
有向图的创立,输出
可以使用DFS或BFS遍历有向图,当遍历到一个顶点时,检查它的出度是否为0,如果是,则将该顶点输出。以下是DFS的实现示例:
```
void dfs(int v, vector<int> adj[], vector<bool>& visited, vector<int>& outdegree_zero) {
visited[v] = true;
if (adj[v].size() == 0) { // 检查出度是否为0
outdegree_zero.push_back(v);
}
for (int u : adj[v]) {
if (!visited[u]) {
dfs(u, adj, visited, outdegree_zero);
}
}
}
vector<int> findOutdegreeZeroVertices(int n, vector<pair<int, int>>& edges) {
vector<int> adj[n];
for (auto e : edges) {
int u = e.first, v = e.second;
adj[u].push_back(v);
}
vector<bool> visited(n, false);
vector<int> outdegree_zero;
for (int i = 0; i < n; i++) {
if (!visited[i]) {
dfs(i, adj, visited, outdegree_zero);
}
}
return outdegree_zero;
}
```
其中,`n`是顶点个数,`edges`是边的集合,每条边表示为一对`(u, v)`,表示从顶点`u`到顶点`v`有一条有向边。`adj`是邻接表,`adj[u]`表示顶点`u`的所有出边所连接的顶点。`visited`记录每个顶点是否已被访问过,`outdegree_zero`保存所有出度为0的顶点。最后调用`findOutdegreeZeroVertices(n, edges)`即可输出所有出度为0的顶点。
阅读全文