Эйлеров граф и проверка матрицы инцидентности - C#
Формулировка задачи:
Ребята, нужна помощь. Завтра сдавать программу, а доделать не знаю как.
В общем программа из файла считывает матрицу инцидентности, далее с ней работает. Перед тем, как программа начнет работать с матрицей, мне надо, чтобы она проверила эту самую матрицу, чтобы она действительно являлась инцидентной.
Признак инцидентности: любой из столбцов матрицы содержит две единицы, либо 1 и -1(если ориентированное ребро), все остальные в нем(столбце) - нули.
Прочитала много тем на форуме, поняла, что надо в каждом столбце посчитать сумму. И если эта сумма в каждом из столбцов будет равна или больше 3-х, то в новый файл вывести сообщение, типа : "проверьте правильность матрицы" и далее с ней действий не производить. А если все нормально с матрицей, то переходить, собственно, к следующей части программы.
Как дописать это в код, правильно дописать, не знаю. Помогите, пожалуйста.
Прикрепляю файл с матрицей, которая является инцидентной. Его нужно переместить в папку "Debug", чтобы программа с ним работала.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Эйлеров_Граф { class Program { static void Main(string[] args) { int i, j, entry_top, out_top, row, col, s, s2; bool yes = true; string str1 = "", str2; string path = "graph.txt"; StreamReader matrix = new StreamReader(File.Open(path, FileMode.Open)); str1 = matrix.ReadLine(); s = str1.Length; int[] mas = new int[s]; mas = Stroka(str1, s); row = mas[0]; col = mas[1]; int[,] matrixInc = new int[row, col]; // считывание матрицы инцидентности for (i = 0; i < row; i++) { str2 = matrix.ReadLine(); s2 = str2.Length; int[] mas2 = new int[col]; mas2 = Stroka(str2, s2); for (j = 0; j < col; j++) matrixInc[i, j] = mas2[j]; } matrix.Close(); // Проверка на существование в графе цикла for (i = 0; i < row; i++) { entry_top = 0; out_top = 0; for (j = 0; j < col; j++) { if (matrixInc[i, j] > 0) entry_top++; if (matrixInc[i, j] < 0) out_top++; } if (out_top == 0) { if (entry_top % 2 != 0) yes = false; } else { if ((entry_top + out_top) % 2 != 0) yes = false; if (out_top > ((int)((entry_top + out_top) / 2))) yes = false; } } if (yes == false) { string pas = "result.txt"; using (var stream = new StreamWriter(pas)) stream.WriteLine("Граф не является эйлеровым."); } else { string pas = "result.txt"; using (var stream = new StreamWriter(pas)) stream.WriteLine("Граф является эйлеровым. Поздравляем!!"); } } // вычленение элементов из строки public static int[] Stroka(string str, int n) { string str2 = ""; int i, k = 0; int[] massiv = new int[n]; for (i = 0; i < n; i++) { if (str[i] != ' ') str2 += str[i]; if ((str[i] == ' ') || (i == n - 1)) { massiv[k] = int.Parse(str2); str2 = ""; k++; } } return massiv; } } }
Решение задачи: «Эйлеров граф и проверка матрицы инцидентности»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Эйлеров_Граф { class Program { public static void Main(string[] args) { int i, j, entry_top, out_top, row, col, s, s2, sum; bool yes = true; string str1 = "", str2; string path = "graph.txt"; StreamReader matrix = new StreamReader(File.Open(path, FileMode.Open)); str1 = matrix.ReadLine(); s = str1.Length; int[] mas = new int[s]; mas = Stroka(str1, s); row = mas[0]; col = mas[1]; int[,] matrixInc = new int[row, col]; // считывание матрицы инцидентности for (i = 0; i < row; i++) { str2 = matrix.ReadLine(); s2 = str2.Length; int[] mas2 = new int[col]; mas2 = Stroka(str2, s2); for (j = 0; j < col; j++) matrixInc[i, j] = mas2[j]; } //считаем сумму чисел в каждом столбце //для всех столбцов, начиная с 0 до последнего выполняем цикл for (j = 0; j < matrixInc.GetLength(1); j++) { sum = 0; // для всех строк, начиная с 0 до последней выполняем цикл for (i = 0; i < matrixInc.GetLength(0); i++) { // присваиваем значению sum сумму элементов всех строк данного столбца sum += matrixInc[i, j]; } //в принципе, не нужный участок проги :) Console.WriteLine("Sum in {0} column: {1}", j, sum); } matrix.Close(); // Проверка на существование в графе цикла for (i = 0; i < row; i++) { entry_top = 0; out_top = 0; for (j = 0; j < col; j++) { if (matrixInc[i, j] > 0) entry_top++; if (matrixInc[i, j] < 0) out_top++; } if (out_top == 0) { if (entry_top % 2 != 0) yes = false; } else { if ((entry_top + out_top) % 2 != 0) yes = false; if (out_top > ((int)((entry_top + out_top) / 2))) yes = false; } } if (yes == false) { string pas = "result.txt"; using (var stream = new StreamWriter(pas)) stream.WriteLine("Граф не является эйлеровым."); } else { string pas = "result.txt"; using (var stream = new StreamWriter(pas)) stream.WriteLine("Граф является эйлеровым. Поздравляем!!"); } } // вычленение элементов из строки public static int[] Stroka(string str, int n) { string str2 = ""; int i, k = 0; int[] massiv = new int[n]; for (i = 0; i < n; i++) { if (str[i] != ' ') str2 += str[i]; if ((str[i] == ' ') || (i == n - 1)) { massiv[k] = int.Parse(str2); str2 = ""; k++; } } return massiv; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д