求DAG上两点的最短距离
2015-09-19 22:47
225 查看
Problem
给出一个不带边权(即边权为1)的有向无环图(unweighted DAG)以及DAG上两点s, t,求s到t的最短距离,如果无法从s走到t,则输出-1。
Solution
DFS,BFS都可,对于unweighted DAG, BFS更合适,下面给出DFS解法。
const int N(1e5+5); vector<int> g ; int d , vis ; void dfs(int u, int t){ vis[u]=1; if(u==t){d[u]=0; return;} for(int i=0; i<g[u].size(); i++){ int &v=g[u][i]; if(!vis[v]) dfs(v, t); if(~d[v]) d[u]=~d[u]?min(d[v]+1, d[u]):d[v]+1; } } int solve(int s, int t){ memset(d, -1, sizeof(d)); memset(vis, 0, sizeof(vis)); dfs(s, t); return d[s]; }
对于weighted DAG, 解法类似。
相关文章推荐
- 读完这100篇论文 就能成大数据高手
- 黑马程序员-------IO流
- android------创建模拟器时不能点CPU/ABI
- Jsp和Servlet的联系与区别
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
- 高质量C++/C编程指南
- C++中一些概念
- Android0919<二十三>(ViewGroup、Animation、Animator、Layout Animations)
- 朴素贝叶斯分类器
- 重造轮子-栈实现队列
- 使用GIT进行代码管理的心得
- oracle体系结构(1)
- c++(重载、覆盖、隐藏)&&什么情况下,类的析构函数应该声明为虚函数?为什么?
- C#操作excel 报:“不能更新。数据库或对象为只读。”
- linux进程通信--消息队列
- 一看就懂的ReactJs入门教程(精华版)
- 新学期新开始
- 【Xamarin 开发 IOS --IOS 页面导航概念Segue】
- hdu5451 矩阵快速幂+暴力打表循环节
- Verlet-js JavaScript 物理引擎