1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<iostream> using namespace std;
int main() { int point,edge; int minl = 0; int inf = 999999; cin >> point >> edge;
int** arr = new int*[point + 1]; for (int i = 0; i <= point; i++) { arr[i] = new int[point + 1]; for (int j = 0; j <= point; j++) { arr[i][j] = inf; } arr[i][i] = 0; }
int a, b, c; for (int i = 0; i < edge; i++) { cin >> a >> b >> c; arr[a][b] = c; arr[b][a] = c; }
int* dis = new int[point + 1]; bool* book = new bool[point + 1]; for (int i = 1; i <= point; i++) { book[i] = false; dis[i] = arr[1][i]; }
int minleng,minpoin; int count = 0; book[1] = true; count++; while (count < point) { minleng = inf; for (int i = 1; i <= point; i++) { if (book[i] == false && dis[i] < minleng) { minleng = dis[i]; minpoin = i; } }
book[minpoin] = true; count++; minl += minleng;
for (int i = 1; i <= point; i++) { if (book[i] == false && dis[i] > arr[minpoin][i]) { dis[i] = arr[minpoin][i]; } } }
cout << minl;
return 0; }
|