GraphMatrix::DFS深度优先搜索
2015-06-05 16:02
375 查看
template <typename Tv, typename Te> //深度优先搜索DFS算法(全图) void Graph<Tv, Te>::dfs(int s) { //assert: 0 <= s < n reset(); int clock = 0; int v = s; //初始化 do //逐一检查所有顶点 if (UNDISCOVERED == status(v)) //一旦遇到尚未发现的顶点 DFS(v, clock); //即从该顶点出发启动一次DFS while (s != (v = (++v % n))); //按序号检查,故不漏不重 } template <typename Tv, typename Te> //深度优先搜索DFS算法(单个连通域) void Graph<Tv, Te>::DFS(int v, int& clock) { //assert: 0 <= v < n dTime(v) = ++clock; status(v) = DISCOVERED; //发现当前顶点v for (int u = firstNbr(v); -1 < u; u = nextNbr(v, u)) //枚举v的所有邻居u switch (status(u)) { //并视其状态分别处理 case UNDISCOVERED: //u尚未发现,意味着支撑树可在此拓展 status(v, u) = TREE; parent(u) = v; DFS(u, clock); break; case DISCOVERED: //u已被发现但尚未访问完毕,应属被后代指向的祖先 status(v, u) = BACKWARD; break; default: //u已访问完毕(VISITED,有向图),则视承袭关系分为前向边或跨边 status(v, u) = (dTime(v) < dTime(u)) ? FORWARD : CROSS; break; } status(v) = VISITED; fTime(v) = ++clock; //至此,当前顶点v方告访问完毕 }
相关文章推荐
- excel数据导入oracle
- 关机相关(shutdown,reboot)
- TortoiseSvn客户端出现Http state 405 'Method Not Allowed' 的解决办法
- python 模拟HTTP服务端
- Invoke()/BeginInvoke()区别
- ActivityManagerService 详解
- Android中软键盘弹出时底部控件会上移的问题
- sqlite3 常用操作
- 辛星浅析html5中的role属性
- 杭电acm2037 今年暑假不AC
- NSSearchPathForDirectoriesInDomains用法(转)
- 转载:爱内测 1分钟找APP漏洞,开发者就可以开心「捉虫」
- 1029. Median (25)
- SCORM Content Packages - Trident
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 设计模式-外观模式
- jquery下拉框事件
- 关于龙卷风你应该知道的五件事
- cv::imread的flags
- SAT句子填空题的分析过程