Эйлеров граф и проверка матрицы инцидентности - C#

Узнай цену своей работы

Формулировка задачи:

Ребята, нужна помощь. Завтра сдавать программу, а доделать не знаю как. В общем программа из файла считывает матрицу инцидентности, далее с ней работает. Перед тем, как программа начнет работать с матрицей, мне надо, чтобы она проверила эту самую матрицу, чтобы она действительно являлась инцидентной. Признак инцидентности: любой из столбцов матрицы содержит две единицы, либо 1 и -1(если ориентированное ребро), все остальные в нем(столбце) - нули. Прочитала много тем на форуме, поняла, что надо в каждом столбце посчитать сумму. И если эта сумма в каждом из столбцов будет равна или больше 3-х, то в новый файл вывести сообщение, типа : "проверьте правильность матрицы" и далее с ней действий не производить. А если все нормально с матрицей, то переходить, собственно, к следующей части программы. Как дописать это в код, правильно дописать, не знаю. Помогите, пожалуйста.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace Эйлеров_Граф
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. int i, j, entry_top, out_top, row, col, s, s2; bool yes = true;
  14. string str1 = "", str2;
  15. string path = "graph.txt";
  16. StreamReader matrix = new StreamReader(File.Open(path, FileMode.Open));
  17. str1 = matrix.ReadLine();
  18. s = str1.Length;
  19. int[] mas = new int[s];
  20. mas = Stroka(str1, s);
  21. row = mas[0];
  22. col = mas[1];
  23. int[,] matrixInc = new int[row, col];
  24. // считывание матрицы инцидентности
  25. for (i = 0; i < row; i++)
  26. {
  27. str2 = matrix.ReadLine();
  28. s2 = str2.Length;
  29. int[] mas2 = new int[col];
  30. mas2 = Stroka(str2, s2);
  31. for (j = 0; j < col; j++)
  32. matrixInc[i, j] = mas2[j];
  33. }
  34. matrix.Close();
  35. // Проверка на существование в графе цикла
  36. for (i = 0; i < row; i++)
  37. {
  38. entry_top = 0;
  39. out_top = 0;
  40. for (j = 0; j < col; j++)
  41. {
  42. if (matrixInc[i, j] > 0) entry_top++;
  43. if (matrixInc[i, j] < 0) out_top++;
  44. }
  45. if (out_top == 0)
  46. {
  47. if (entry_top % 2 != 0) yes = false;
  48. }
  49. else
  50. {
  51. if ((entry_top + out_top) % 2 != 0) yes = false;
  52. if (out_top > ((int)((entry_top + out_top) / 2))) yes = false;
  53. }
  54. }
  55. if (yes == false)
  56. {
  57. string pas = "result.txt";
  58. using (var stream = new StreamWriter(pas))
  59. stream.WriteLine("Граф не является эйлеровым.");
  60. }
  61. else
  62. {
  63. string pas = "result.txt";
  64. using (var stream = new StreamWriter(pas))
  65. stream.WriteLine("Граф является эйлеровым. Поздравляем!!");
  66. }
  67. }
  68. // вычленение элементов из строки
  69. public static int[] Stroka(string str, int n)
  70. {
  71. string str2 = "";
  72. int i, k = 0;
  73. int[] massiv = new int[n];
  74. for (i = 0; i < n; i++)
  75. {
  76. if (str[i] != ' ') str2 += str[i];
  77. if ((str[i] == ' ') || (i == n - 1))
  78. {
  79. massiv[k] = int.Parse(str2);
  80. str2 = "";
  81. k++;
  82. }
  83. }
  84. return massiv;
  85. }
  86. }
  87. }
Прикрепляю файл с матрицей, которая является инцидентной. Его нужно переместить в папку "Debug", чтобы программа с ним работала.

Решение задачи: «Эйлеров граф и проверка матрицы инцидентности»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8. namespace Эйлеров_Граф
  9. {
  10.     class Program
  11.     {
  12.  
  13.         public static void Main(string[] args)
  14.         {
  15.             int i, j, entry_top, out_top, row, col, s, s2, sum; bool yes = true;
  16.            
  17.             string str1 = "", str2;
  18.             string path = "graph.txt";
  19.             StreamReader matrix = new StreamReader(File.Open(path, FileMode.Open));
  20.             str1 = matrix.ReadLine();
  21.             s = str1.Length;
  22.             int[] mas = new int[s];
  23.             mas = Stroka(str1, s);
  24.             row = mas[0];
  25.             col = mas[1];
  26.             int[,] matrixInc = new int[row, col];
  27.             // считывание матрицы инцидентности
  28.             for (i = 0; i < row; i++)
  29.             {
  30.                 str2 = matrix.ReadLine();
  31.                 s2 = str2.Length;
  32.                 int[] mas2 = new int[col];
  33.                 mas2 = Stroka(str2, s2);
  34.                 for (j = 0; j < col; j++)
  35.                 matrixInc[i, j] = mas2[j];
  36.             }
  37.                 //считаем сумму чисел в каждом столбце
  38.                //для всех столбцов, начиная с 0 до последнего выполняем цикл
  39.                for (j = 0; j < matrixInc.GetLength(1); j++)
  40.             {
  41.                 sum = 0;
  42.                 // для всех строк, начиная с 0 до последней выполняем цикл
  43.                 for (i = 0; i < matrixInc.GetLength(0); i++)
  44.                 {
  45.                     // присваиваем значению sum сумму элементов всех строк данного столбца
  46.                     sum += matrixInc[i, j];
  47.                 }
  48.                 //в принципе, не нужный участок проги :)
  49.                 Console.WriteLine("Sum in {0} column: {1}", j, sum);
  50.             }
  51.                 matrix.Close();
  52.                  
  53.                                      
  54.                     // Проверка на существование в графе цикла
  55.                     for (i = 0; i < row; i++)
  56.                     {
  57.                         entry_top = 0;
  58.                         out_top = 0;
  59.                         for (j = 0; j < col; j++)
  60.                         {
  61.                             if (matrixInc[i, j] > 0) entry_top++;
  62.                             if (matrixInc[i, j] < 0) out_top++;
  63.                         }
  64.                         if (out_top == 0)
  65.                         {
  66.                             if (entry_top % 2 != 0) yes = false;
  67.                         }
  68.                         else
  69.                         {
  70.                             if ((entry_top + out_top) % 2 != 0) yes = false;
  71.                             if (out_top > ((int)((entry_top + out_top) / 2))) yes = false;
  72.                         }
  73.                     }
  74.              
  75.                     if (yes == false)
  76.                     {
  77.                         string pas = "result.txt";
  78.                         using (var stream = new StreamWriter(pas))
  79.                             stream.WriteLine("Граф не является эйлеровым.");
  80.                     }
  81.                     else
  82.                     {
  83.                         string pas = "result.txt";
  84.                         using (var stream = new StreamWriter(pas))
  85.                             stream.WriteLine("Граф является эйлеровым. Поздравляем!!");
  86.                     }
  87.                 }
  88.  
  89.  
  90.  
  91.         // вычленение элементов из строки
  92.         public static int[] Stroka(string str, int n)
  93.         {
  94.             string str2 = "";
  95.             int i, k = 0;
  96.             int[] massiv = new int[n];
  97.             for (i = 0; i < n; i++)
  98.             {
  99.                 if (str[i] != ' ') str2 += str[i];
  100.                 if ((str[i] == ' ') || (i == n - 1))
  101.                 {
  102.                     massiv[k] = int.Parse(str2);
  103.                     str2 = "";
  104.                     k++;
  105.                 }
  106.             }
  107.             return massiv;
  108.         }
  109.       }
  110.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы