Sicily 1155. Can I Post the letter
2017-10-21 00:43
477 查看
解法一:
直接用dfs暴力搜索就可以了。
但是有一点需要注意:从起点开始搜会超时,但是从终点回搜就不会。咋一看有点难以理解:不都是dfs吗,为什么往回搜就不会超时?我个人的理解是:将起点看作是树的根,将终点看作是树的叶,从根到不同的叶有很多条路,而从叶回溯到根情况就相对来说少了很多,所以从终点搜就不会超时。
下面是代码:
解法二:沃舍尔算法
沃舍尔算法主要用于求有向图两结点之间的最短距离,这里用于求有向图两点之间路径的存在性。
关于沃舍尔算法,这篇文章写得挺易懂的:沃舍尔/Floyd算法
代码如下:
直接用dfs暴力搜索就可以了。
但是有一点需要注意:从起点开始搜会超时,但是从终点回搜就不会。咋一看有点难以理解:不都是dfs吗,为什么往回搜就不会超时?我个人的理解是:将起点看作是树的根,将终点看作是树的叶,从根到不同的叶有很多条路,而从叶回溯到根情况就相对来说少了很多,所以从终点搜就不会超时。
下面是代码:
#include <iostream> #include <memory.h> using namespace std; int grap[200][200]; int mark[200]; int m,n,cnt; bool dfs(int pos) { if (pos == 0) return true; mark[pos] = 1; for (int i = 0;i < n;i ++) { if (grap[i][pos] && !mark[i]) { if (dfs(i)) return true; } } mark[pos] = 0; return false; } int main() { while(cin >> n && n) { cin >> m; int a,b; memset(grap,0,sizeof(grap)); memset(mark,0,sizeof(mark)); for (int i = 0;i < m;i ++) { cin >> a >> b; grap[a][b] = 1; } if (dfs(n - 1)) cout << "I can post the letter" << endl; else cout << "I can't post the letter" << endl; } }
解法二:沃舍尔算法
沃舍尔算法主要用于求有向图两结点之间的最短距离,这里用于求有向图两点之间路径的存在性。
关于沃舍尔算法,这篇文章写得挺易懂的:沃舍尔/Floyd算法
代码如下:
#include <iostream> #include <memory.h> using namespace std; int main() { int n,m; int a,b; int grap[200][200]; while (cin >> n && n) { cin >> m; memset(grap,0,sizeof(grap)); for (int i = 0;i < m;i ++ ) { cin >> a >> b; grap[a][b] = 1; } // 沃舍尔算法核心部分 for (int i = 0;i < n;i ++ ) { for (int j = 0;j < n;j ++ ) { if (grap[i][j] == 1 ) { for (int k = 0;k < n;k ++ ) { if (grap[j][k] == 1) grap[i][k] = 1; } } } } if (grap[0][n-1]==1 ) cout << "I can post the letter" << endl; else cout << "I can't post the letter" << endl; } }
相关文章推荐
- sicily 1155 Can I Post the letter
- sicily:1155.Can I Post the letter
- Sicily 1155 Can I Post the letter (图的遍历 BFS)
- sicily 1155. Can I Post the lette
- [sicily online]1155. Can I Post the lette(图的深度优先搜索)
- 1155. Can I Post the letter(有向图遍历判断两点是否可到达)
- <OJ_Sicily>Can I Post the letter
- sicily 1155. Can I Post the lette
- Sicily 1155. Can I Post the lette
- sicily 1155. Can I Post the lette
- Sicily 1155. Can I Post the lette
- 1155. Can I Post the lette
- 算法学习【12】—— 1155. Can I Post the lette
- finally I find the problem why my phone cant post before
- 1155. Can I Post the lette
- Can I Post the lette
- 1155. Can I Post the lette
- Firefox is currently in offline mode and can't browse the Web
- Codeforces Round #360 (Div. 2) E. The Values You Can Make DP
- WLS Exception: <BEA-149132> <Split-dir application HRSystem can only be deployed to the Admin Server