floyd变形算法
设置D[i][j] = 从i到j的所有路径li,对于每条路径的每个边的权重w的最大值为liw,则D[i][j]为所有i到j的路径的liw最小的那条的liw值
测试数据:
lstar@ubuntu:~/ds/poj$ ./test_list.sh 2253
2253_1.in.dat:
2
0 0
3 4
3
17 4
19 4
18 5
0
result:
Scenario #1
Frog Distance = 5.000
Scenario #2
Frog Distance = 1.414
2253_2.in.dat:
2
0 0
3 4
3
17 4
19 4
18 5
8
1 1
4 0
1 2
2 2
3 2
4 2
3 0
5 1
3
9 10
10 10
100 10
6
5 5
100 100
4 4
3 3
2 2
1 1
5
1 2
2 1
3 2
4 1
5 2
3
999 999
1 1
3 3
0
result:
Scenario #1
Frog Distance = 5.000
Scenario #2
Frog Distance = 1.414
Scenario #3
Frog Distance = 1.414
Scenario #4
Frog Distance = 1.000
Scenario #5
Frog Distance = 134.350
Scenario #6
Frog Distance = 1.414
Scenario #7
Frog Distance = 1408.557
code:
点击(此处)折叠或打开
- #include <iostream>
- #include <stdio.h>
- #include <cmath>
- #include <cstring>
-
- using namespace std;
- #define inf (10000.0)
-
- int n;
- #define MAX_V (200+1)
- struct _v{
- int x;
- int y;
- }V[MAX_V];
-
- double E[MAX_V][MAX_V];
- double D[MAX_V][MAX_V];
- double dist[MAX_V];
- int visit[MAX_V];
-
- double dis(int x1,int y1,int x2,int y2)
- {
- return sqrt( (double)( (x2-x1)*(x2-x1)+ (y2-y1)*(y2 - y1)));
- }
-
- double floyd()
- {
-
-
- for(int k=1;k<=n;++k)
- {
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- //D[i][j] = max(D[i][k],D[k][j]);
- double w = max(D[i][k],D[k][j]);
- if(w < D[i][j])
- D[i][j] = w;
- }
- }
- }
-
- return D[1][2];
-
- }
-
- int index_v=1;
- int main()
- {
- int x,y;
- string blankline;
- while(cin>>n)
- {
- //cout<<"n:"<<n<<endl;
- if(n == 0)
- break;
-
- memset(V,0,sizeof(V));
- memset(E,0,sizeof(E));
- memset(visit,0,sizeof(visit));
- memset(D,0,sizeof(D));
-
- for(int i=1;i<=n;i++)
- {
- cin>>x>>y;
- V[i].x=x;
- V[i].y=y;
- }
- //create edge
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- if( i!=j)
- E[i][j] = dis(V[i].x,V[i].y,V[j].x,V[j].y);
- D[i][j] = E[i][j];
-
- }
- }
-
- //cout<<"create edge OK.."<<endl;
- double d = floyd();
- //floyd
- cout<<"Scenario #"<<index_v++<<endl;
- //cout<<"Frog Distance = "<<d<<endl;
- printf("Frog Distance = %.3f\n",d);
- cout<<endl;
- }
- }