ChameL1oN

МетодПрима(другой вывод)

Apr 12th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <locale>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int n; //Кол-во вершин
  9. int treeline = 0; //Длина дерева
  10. ifstream f("input.txt", ios::in);
  11.  
  12. //Построенние минимального остовного дерева методом Прима
  13.  
  14. void Prim(int** massive, bool* used){
  15. int minlen = 500000; //Абсолютно любое очень большое число
  16. int q, w; //Переменные для хранения информации двух соединяемых вершин
  17. for (int i = 0; i < n; i++){
  18. for (int j = 0; j < n; j++){
  19. if (massive[i][j] < minlen && massive[i][j] > 0 && used[i] == true && used[j] == false){ //Поиск минимального расстояния
  20. minlen = massive[i][j];
  21. q = i;
  22. w = j;
  23. }
  24. }
  25. }
  26. cout << " " << q + 1 << "-" << w + 1 << " ";
  27. treeline += minlen;
  28. used[w] = true;
  29. }
  30.  
  31. void main(){
  32. setlocale(LC_ALL, "rus");
  33. f >> n;
  34. bool* used = new bool[n]; //Массив , хранящий информацию о принадлежности вершин к дереву
  35. int** massive = new int*[n]; //Массив матрицы расстояний
  36. for (int i = 0; i < n; i++){
  37. massive[i] = new int[n];
  38. used[i] = false; // Обнуляем массив
  39. for (int j = 0; j < n; j++){
  40. string s;
  41. f >> s;
  42. if (s == "~") massive[i][j] = -1; //Если ~ то считаем как отрицательное число (для расстояния такое невозможно)
  43. else massive[i][j] = atoi(s.c_str()); // atoi = перевод строки в int значение
  44. }
  45. }
  46. cout << endl;
  47. cout << endl;
  48. used[0] = true; //Заносим первую вершину в дерево
  49. for (int i = 0; i < n - 1; i++){ // Кол-во необходимых присоединений для построения дерева = n-1
  50. Prim(massive, used);
  51. }
  52. cout << endl;
  53. cout << endl;
  54. cout << "Длина минимального остовного дерева = " << treeline << endl;;
  55. cout << endl;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment