查看“︁10-搜索/03-简单图上搜索”︁的源代码
←
10-搜索/03-简单图上搜索
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 简单图上搜索 == 在图(Graph)上进行 DFS/BFS,用于遍历连通分量、检测环、求拓扑序等。 === 图的存储 === 详见 [[11-图论/01-图论基础|图论基础]]。 === 图上 DFS === <syntaxhighlight lang="cpp"> vector<int> g[MAXN]; bool vis[MAXN]; void dfs(int u) { vis[u] = true; cout << u << " "; // 访问节点 for (int v : g[u]) if (!vis[v]) dfs(v); } </syntaxhighlight> === 图上 BFS === <syntaxhighlight lang="cpp"> void bfs(int start) { queue<int> q; q.push(start); vis[start] = true; while (!q.empty()) { int u = q.front(); q.pop(); cout << u << " "; // 访问节点 for (int v : g[u]) if (!vis[v]) { vis[v] = true; q.push(v); } } } </syntaxhighlight> === 连通分量计数 === <syntaxhighlight lang="cpp"> int cnt = 0; for (int i = 1; i <= n; i++) if (!vis[i]) { cnt++; dfs(i); // 或 bfs(i) } cout << cnt << "\n"; </syntaxhighlight> === 检测环 === 在 DFS 中记录当前路径上的节点: <syntaxhighlight lang="cpp"> bool on_path[MAXN]; // 当前 DFS 路径上的节点 bool has_cycle(int u) { vis[u] = true; on_path[u] = true; for (int v : g[u]) { if (!vis[v]) { if (has_cycle(v)) return true; } else if (on_path[v]) // 当前路径上的节点,说明有环 return true; } on_path[u] = false; return false; } </syntaxhighlight> [[Category:搜索]] [[Category:三三文档]]
返回
10-搜索/03-简单图上搜索
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息