Эйлеров граф и проверка матрицы инцидентности - 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д