当前位置: 首页 > news >正文

合肥网站设计网站衣服 div网站

合肥网站设计网站,衣服 div网站,模块化网站开发,智慧团建如何在手机上登录dfs 的两种写法 在看之前实现图的遍历 dfs 和拓扑排序 dfs 实现的代码的时候的感悟 图的遍历 dfs 和拓扑排序 dfs 的区别 0 → 1 ↓ ↓ 2 → 3图的邻接表表示#xff1a; adjList[0] {1, 2}; adjList[1] {3}; adjList[2] {3}; adjList[3] {};正常的 DFS 遍历#x…dfs 的两种写法 在看之前实现图的遍历 dfs 和拓扑排序 dfs 实现的代码的时候的感悟 图的遍历 dfs 和拓扑排序 dfs 的区别 0 → 1 ↓ ↓ 2 → 3图的邻接表表示 adjList[0] {1, 2}; adjList[1] {3}; adjList[2] {3}; adjList[3] {};正常的 DFS 遍历 从节点 0 开始执行 DFS假设我们按照邻接表的顺序遍历 从节点 0 开始访问 0然后访问 0 的邻接节点 1 和 2 从节点 1 开始访问 1然后访问 1 的邻接节点 3 从节点 3 开始访问 3发现没有邻接节点 回到节点 1再回到节点 0访问 2 从节点 2 开始访问 2然后访问 2 的邻接节点 3但 3 已经访问过了 DFS 遍历的顺序0 - 1 - 3 - 2 拓扑排序的 DFS 遍历 在拓扑排序中我们使用栈存储节点并确保先访问所有邻接节点再加入栈 从节点 0 开始访问 0并标记为“正在访问” 访问 0 的邻接节点 1并标记为“正在访问” 访问 1 的邻接节点 3并标记为“正在访问” 节点 3 没有邻接节点标记为“已访问”并将 3 放入栈中 回到节点 1标记为“已访问”并将 1 放入栈中 回到节点 0访问 2并标记为“正在访问” 访问 2 的邻接节点 3已访问过因此直接标记 2 为“已访问”并将 2 放入栈中 回到节点 0标记为“已访问”并将 0 放入栈中 拓扑排序的顺序3 - 1 - 2 - 0 总结两者的区别 DFS 遍历按照遇到的第一个未访问的邻接节点进行递归访问 直接记录 节点的访问顺序 拓扑排序要求节点在加入结果时要等到其 所有邻接节点被完全访问 过因此节点的加入顺序是倒序的即后序遍历 代码 原 dfs 遍历代码 void MyGraph::dfsVisit(int vertex, vectorbool visited, vectorint traversal) {visited[vertex] true;traversal.push_back(vertex);for (const auto edge : adjList[vertex])if (!visited[edge.first])dfsVisit(edge.first, visited, traversal); }void MyGraph::DFS(int startVertex) {vectorbool visited(n, false); vectorint traversal; dfsVisit(startVertex, visited, traversal);for (int vertex : traversal) cout vertex ;cout endl; }拓扑排序的 dfs 实现 bool dfs(int node, vectorvectorint adj, vectorint visited, stackint result) {// 当前节点正在访问图中有环if (visited[node] 1)return false; // 当前节点已经访问过if (visited[node] 2)return true; // 1. 对每个未被访问的节点执行 DFS标记该节点为访问中visited[node] 1; for (int neighbor : adj[node])// 2. 如果访问到某个已经在 “ 访问中 ” 状态的节点则说明图中存在环无法进行拓扑排序if (!dfs(neighbor, adj, visited, result))return false;// 3. DFS 完成后标记节点为“已访问”并将节点加入到结果栈或者队列中visited[node] 2; // 标记为已访问result.push(node); // 将节点加入栈return true; }vectorint topologicalSortDFS(int n, vectorvectorint edges) {vectorvectorint adj(n);for (const auto edge : edges)adj[edge[0]].push_back(edge[1]);vectorint visited(n, 0); // 0: 未访问, 1: 正在访问, 2: 已访问stackint result;// 1. 对每个未被访问的节点执行 DFS标记该节点为访问中for (int i 0; i n; i)if (visited[i] 0)if (!dfs(i, adj, visited, result))return {}; // 如果存在环返回空vectorint order;while (!result.empty()){order.push_back(result.top());result.pop();}return order; } 想到如果同样对 dfs 遍历的返回值改为 bool 值也可以写成 bool MyGraph::dfsVisit(int vertex, vectorbool visited, vectorint traversal) {if (visited[vertex])return true;visited[vertex] true; traversal.push_back(vertex); for (const auto edge : adjList[vertex])if (!dfsVisit(edge.first, visited, traversal))return false;return true; }void MyGraph::DFS(int startVertex) {vectorbool visited(n, false); vectorint traversal; if (dfsVisit(startVertex, visited, traversal)){cout DFS Traversal: ;for (int vertex : traversal){cout vertex ;}cout endl;} }
http://www.hkea.cn/news/14433260/

相关文章:

  • 永城市专业做网站资兴市网站建设专业
  • 中国搜索引擎大全比较著名的seo网站
  • 全国最大的网站建设公司排名科技画作品
  • <网站建设与运营》酒类做网站
  • 成都网站设计排名的公司价格ps做图游戏下载网站
  • 哈尔滨网站提升排名电子商务网站建设选修课
  • cms网站管理系统唐山海港经济开发区人才网
  • 公司网站百度搜索的描述怎么做东莞网络推广代运营
  • 岳池发展建设集团有限公司门户网站装修公司网站建设设计作品
  • 山东省住房和城乡建设厅网站主页在线做logo
  • 贵州网站建设营销公司lamp网站开发经验
  • 中小型企业网站选择什么配置的亚马逊服务器wordpress无法寻找图像
  • 怎么做有数据库的网站电子商务网站系统建设实训心得
  • 如何做优惠券网站建设网站需要电脑配置
  • 南宁网站建设策划外包wordpress jquery插件
  • 在线看视频网站怎么做用阿里云服务器做自己购物网站
  • 中医院网站模板编辑网页的工具有哪些
  • 企业官网建站流程设计一个简单的网页
  • 网站备案截图推广做网站
  • 网站建设可以修改吗谷歌网站提交入口
  • 中小型网站建设报价wordpress 修改轮播
  • 无锡自助网站建立平台还是搭建平台
  • 做投票链接网站网站建设详细流程视频
  • 中小型网站建设多少钱seo快速排名软件
  • 苏州无锡市住房和城乡建设局网站如何免费开网店的步骤
  • 网站建设 今晟网络做网站一定要域名吗
  • 自己做盗版影视网站google帐户登录网站如何做的
  • 网站建设哪些好免费外网服务器ip地址
  • 南乐网站建设费用南京营销型网站制作
  • 宁波网站建设设计至诚服务wordpress数据库优化插件