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

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

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

Ребята, нужна помощь. Завтра сдавать программу, а доделать не знаю как. В общем программа из файла считывает матрицу инцидентности, далее с ней работает. Перед тем, как программа начнет работать с матрицей, мне надо, чтобы она проверила эту самую матрицу, чтобы она действительно являлась инцидентной. Признак инцидентности: любой из столбцов матрицы содержит две единицы, либо 1 и -1(если ориентированное ребро), все остальные в нем(столбце) - нули. Прочитала много тем на форуме, поняла, что надо в каждом столбце посчитать сумму. И если эта сумма в каждом из столбцов будет равна или больше 3-х, то в новый файл вывести сообщение, типа : "проверьте правильность матрицы" и далее с ней действий не производить. А если все нормально с матрицей, то переходить, собственно, к следующей части программы. Как дописать это в код, правильно дописать, не знаю. Помогите, пожалуйста.
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;
        }
      }
    }
Прикрепляю файл с матрицей, которая является инцидентной. Его нужно переместить в папку "Debug", чтобы программа с ним работала.

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

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;
        }
      }
    }

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


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

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

5   голосов , оценка 3.6 из 5
Похожие ответы