| ||||||||||
| 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 | |||||||||
Dijkstra+枚举....有错么..代码附上,先谢谢了~#include <stdio.h>
int path[512][512];
int maxnum = 9999999;
int d[512], flag[512];
int main()
{
int n, m, i, j, temp, a, b, dis, w, min, k;
int target1, target2, num = 1, max1, max2;
double h, sum;
while(scanf("%d %d", &n, &m) == 2)
{
if(n == 0 && m == 0)break;
for(i = 0; i <= n; i++)
{
for(j = 0; j <= n; j++)
path[i][j] = maxnum;
d[i] = maxnum;
flag[i] = 0;
}
for(i = 0; i < m; i++)
{
scanf("%d %d %d", &a, &b, &dis);
path[a][b] = dis;
path[b][a] = dis;
}
d[1] = 0;
for(i = 1, w = 0; i <= n; i++)
{
temp = maxnum;
for(j = 1; j <= n; j++)
if(!flag[j] && d[j] < maxnum)
{
temp = d[j];
min = j;
break;
}
if(temp == maxnum)break;
for(j = 1; j <= n; j++)
{
flag[min] = 1;
if(!flag[j] && path[min][j] + d[min] < d[j])
{
d[j] = d[min] + path[min][j];
}
if(d[j] != maxnum)
{
if(w < d[j])
w = d[j];
}
}
}
for(i = 2, sum = 0, k = 0, target1 = 1; i <= n; i++)
{
if(d[i] != maxnum)
{
for(j = 1; j <= n; j++)
{
if(path[i][j] != maxnum)
{
max1 = d[i] > d[j] ? d[i] : d[j];
max2 = d[i] < d[j] ? d[i] : d[j];
if(max2 + path[i][j] > max1)
{
h = max1 - max2;
h = (path[i][j] - h)*0.5;
h = h + max1;
if(sum < h)
{
sum = h;
k = 1;
target1 = i < j ? i : j;
target2 = i > j ? i : j;
}
}
else if(max2 + path[i][j] == max1)
{
if(sum < d[i])
{
k = 0;
sum = max1;
target1 = i;
}
}
}
}
}
}
if(num != 1)putchar('\n');
if(k == 0)printf("System #%d\nThe last domino falls after %.1lf seconds, at key domino %d.\n", num++, sum, target1);
else printf("System #%d\nThe last domino falls after %.1lf seconds, between key dominoes %d and %d.\n", num++, sum, target1, target2);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator