| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
WA到吐血。。。。。。。大牛帮忙看看#include<iostream>
#include<cmath>
using namespace std;
#define MAX 1000
#define INF 100000000
struct E
{
double x, y;
int kind;
}; E eduge[MAX];
double G[MAX][MAX]; //切记 定义double
double Dij(int n,int s,int t)
{
int i,j,w,mark[MAX];
double minc,d[MAX];
for (i=0;i<n;i++) {
mark[i]=0;
d[i]=G[s][i];
}
mark[s]=1;d[s]=0;
for (i=1;i<n;i++)
{
minc=INF;
w=0;
for (j=0;j<n;j++)
if ((mark[j]==0)&&(minc>=d[j])) {minc=d[j];w=j;}
mark[w]=1;
for (j=0;j<n;j++)
if ((mark[j]==0)&&(G[w][j]!=INF)&&(d[j]>d[w]+G[w][j]))
d[j]=d[w]+G[w][j];
}
return d[t];
}
double dis(E p1, E p2)
{
return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}
int main()
{
double bx, by, ex, ey;
double tempx, tempy;
int i, j;
scanf("%lf%lf%lf%lf", &bx, &by, &ex, &ey); //原来只有一组数据- -
memset(eduge, 0, sizeof(eduge));
eduge[0].x = bx, eduge[0].y = by, eduge[0].kind = 0;
eduge[1].x = ex, eduge[1].y = ey, eduge[1].kind = 1;
int gg = 2;
int k = 1; //表示不同的线路
while(scanf("%lf%lf", &tempx, &tempy) != EOF) {
k ++;
eduge[gg].x = tempx, eduge[gg].y = tempy, eduge[gg ++].kind = k;
while(scanf("%lf%lf", &tempx, &tempy) && tempx != -1)
eduge[gg].x = tempx, eduge[gg].y = tempy, eduge[gg ++].kind = k;
}
for(i = 0; i < MAX; i ++)
for(j = 0; j <= i; j ++)
if(i == j)
G[i][j] = 0;
else
G[i][j] = G[j][i] = INF;
for(i = 0; i < gg; i ++)
for(j = 0; j < i; j ++) {
if(eduge[i].kind == eduge[j].kind)
G[i][j] = G[j][i] = dis(eduge[i], eduge[j]) * 3 / 2000;
else
G[i][j] = G[j][i] = dis(eduge[i], eduge[j]) * 3 / 500;
}
printf("%.0lf\n", Dij(gg, 0, 1));
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator