
Problem B
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 10 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Problem descriptions as follows: Given you some coordinates pionts on a drawing paper, every point links with the ink with the straight line, causes all points finally to link in the same place. How many distants does your duty discover the shortest length which the ink draws?
Input
Input contains multiple test cases. Process to the end of file.
Output
Sample Input
3 1.0 1.0 2.0 2.0 2.0 4.0
Sample Output
3.41
#include <stdio.h>
#include <math.h>
#include <string.h>
const int maxnum = 105;
const int maxint = 999999;
double dist[maxnum];
double prev[maxnum];
double c[maxnum][maxnum];
double ju(double x1,double x2,double y1,double y2)
{
return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}
void dijkstra(int n,int v)
{
bool s[maxnum];
for(int i=1;i<=n;i++)
{
s[i] = 0;
dist[i] = c[v][i];
}
s[v] = 1;
for(int i = 2; i<=n; i++)
{
int u=v;
double temp = maxint;
for(int j = 1; j<=n; j++)
{
if(!s[j]&&dist[j]<temp)
{
temp = dist[j];
u = j;
}
}
s[u] = 1;
for(int j = 1; j<=n; j++)
{
if(!s[j])
{
double newdist = dist[j] + c[u][j];
if(newdist<c[u][j])
{
dist[j] = newdist;
}
}
}
}
}
int main()
{
int n;
double x[105],y[105];
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
c[i][j] = ju(x[i],x[j],y[i],y[j]);
c[j][i] = c[i][j];
}
c[i][i] = 0;
}
dijkstra(n,1);
printf("%.2lf\n",dist[n]);
}
}
为什么结果不正确?