洛谷图论入门题--基本题必做 图-最短路径-1.信使(msner)
Posted 秦时、长浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷图论入门题--基本题必做 图-最短路径-1.信使(msner)相关的知识,希望对你有一定的参考价值。
1 //带病打代码的我,心好累,脑子更累。 看到此代码的请给点个赞 ,谢谢。 2 //这个题还是比较简单的,用弗洛伊德完全就能过; 3 /*由衷的感谢江山,帮忙看程序的错误 , 4 5 ,--^----------,--------,-----,-------^--, 6 | ||||||||| `--------\' | O 7 `+---------------------------^----------| 8 `\\_,-------, _________________________| 9 / XXXXXX /`| / 10 / XXXXXX / `\\ / 11 / XXXXXX /\\______( 12 / XXXXXX / 13 / XXXXXX / 为山哥点赞! 14 (________( 15 `------\' 16 */ 17 18 19 //洛谷炸了 20 #include<iostream> 21 #include<cstring> 22 #include<cmath> 23 using namespace std; 24 //第一次开了100*100的数组,结果炸了。 25 int f[5000][5000] , m , n , mmax = -1; 26 int main(){ 27 cin>>n>>m; 28 //初始化,随便一个较大的数本人喜好123456789 29 for(int i=1;i<=n;++i){ 30 for(int j=1;j<=n;++j){ 31 f[i][j]=123456789; 32 } 33 } 34 for(int i = 1 ; i <= m ; i ++) { 35 int x , y , z ; 36 cin>>x>>y>>z; 37 f[x][y] = z; 38 f[y][x] = z; 39 } 40 //枚举每种情况并计算 41 for(int k = 1 ; k <= n ; k ++){ 42 for(int i = 1 ; i <= n ; i ++){ 43 for(int j = 1 ; j <= n ; j ++){ 44 if(f[i][j] > f[i][k] + f[k][j] && 45 f[i][k] != 123456789 && f[k][j] != 5000){ 46 f[i][j] = f[i][k] + f[k][j]; 47 } 48 } 49 } 50 } 51 for(int j = 1 ; j <= n ; j ++){ 52 if(f[1][j] > mmax){ 53 mmax = f[1][j]; //寻找从1开始最小的一个 54 } 55 } 56 cout<<mmax; 57 //结束 58 } 59 //再次感谢山哥 60 /* 61 .__. .==========. 62 .(\\\\//). .-[ for you! ] 63 .(\\\\()//)./ \'==========\' 64 .----(\\)\\/(/)----. 65 | ///\\\\\\ | 66 | ///||\\\\\\ | 67 | //`||||`\\\\ | 68 | |||| | 69 | |||| | 70 `------====------\' 71 */
这个题其实用迪杰斯特拉做也是可以的,但数据规模不是太大O(n3)也能做出来,所以无所谓
好吧,这篇博客就先写这么多,毕竟时间有限,同行们看到了这篇随笔的话可以顺便看一个这个友情链接 蒟蒻 http://mrmorning.coding.me/大佬给你们助阵!
以上是关于洛谷图论入门题--基本题必做 图-最短路径-1.信使(msner)的主要内容,如果未能解决你的问题,请参考以下文章