ccf201712-4,赋权图的变种,没想明白,只写了 弗洛伊德算法,得了30分。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int matrice[520][520];
int path[520][520];
int dis[520];
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int a, b, c, d;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
matrice[i][j] = 200000;
path[i][j] = j;
}
}
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d%d", &a, &b, &c, &d);
matrice[b][c] = d;
matrice[c][b] = d;
dis[b + c] = a;
}
int i, j, k;
for (k = 1; k <= n; k++)
{
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
if (matrice[i][j] > matrice[i][k] + matrice[k][j])
{
matrice[i][j] = matrice[i][k] + matrice[k][j];
path[i][j] = path[i][k];
}
}
}
}
//k = path[1][n];
//printf("1\n");
//while (k != n)
//{
//printf("%d\n",k);
// k = path[k][n];
//}
//printf("%d\n", n);
printf("%d\n", matrice[1][n]);
return 0;
}