floyd 求每对顶点间最短路径
阅读(21) | 评论(0) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
点击(此处)折叠或打开
- #include <iostream>
- #include <cstring>
-
- #define inf 2000000000
-
- using namespace std;
- #define MAX_V (100+1)
-
- int E[MAX_V][MAX_V];
- int D[MAX_V][MAX_V];
- int n;
-
-
- int floyd()
- {
-
-
- for(int k = 1;k<=n ;k++)
- {
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- int kw=D[i][k] + D[k][j];
- if( kw > 0 && kw < D[i][j])
- D[i][j] = kw;
- }
- }
- }
-
- int minw=inf;
- int mink=-1;
-
- for(int k=1;k<=n;k++)
- {
- int maxw = 0;
- for(int i=1;i<=n;i++)
- {
- if(k != i && D[k][i] > maxw)
- {
- maxw=D[k][i];
- }
- }
-
- if(maxw < minw)
- {
- minw = maxw;
- mink = k;
- }
-
- }
-
- cout<<mink<<" "<<minw<<endl;
- return 0;
- }
-
- int main()
- {
- while(cin >> n)
- {
- if (n == 0)
- break;
-
- //memset(V,0,sizoef(V));
- //memset(E,0,sizeof(E));
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- if(i == j)
- E[i][j] = 0;
- else
- E[i][j] = inf;
-
- D[i][j]=inf;
- }
- }
-
-
- int m,v,w;
- for(int i=1;i<=n;i++)
- {
- cin>>m;
- for(int j=1;j<=m;j++)
- {
- cin>>v>>w;
- //i->v w
- E[i][v]=w;
- D[i][v]=w;
- }
- }
-
-
- floyd();
- }
- }
相关热门文章
给主人留下些什么吧!~~
评论热议