Problem Description
Input
Output
Example Input
5 8 1 2 12 1 3 9 1 4 11 1 5 3 2 3 6 2 4 9 3 4 4 4 5 6
Example Output
19
代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INF 0x3f3f3f3f
using namespace std;
int map[1001][1001], v[1001];
int flag;
struct node
{
int data, step;
};
struct node p[1001];
void bfs(int n)
{
int i, sum=0;
int d[1001];
v[1]=1;
for(i=1; i<=n; i++)
{
d[i]=map[1][i];
}
int pos, k=1;
for(int j=1; j<n; j++)
{
int mm=INF;
for(i=1; i<=n; i++)
{
if(v[i]!=1&&d[i]<mm)
{
mm=d[i];
pos=i;
}
}
if(mm==INF)
{
k=0;
break;
}
sum=sum+mm;
v[pos]=1;
for(i=1; i<=n; i++)
{
if(v[i]!=1&&d[i]>map[pos][i])
{
d[i]=map[pos][i];
}
}
}
if(k)
printf("%d\n", sum);
else
printf("-1\n");
}
int main()
{
int m, a, b, n, i, j, c;
while(~scanf("%d", &n))
{
scanf("%d", &m);
memset(map, INF, sizeof(map));
memset(v, 0, sizeof(v));
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(i==j)
map[i][j]=0;
}
}
while(m--)
{
scanf("%d %d %d", &a, &b, &c);
if(map[a][b]>c)
map[a][b]=map[b][a]=c;
}
bfs(n);
}
return 0;
}