Advertisement
Sephinroth

22.1

Apr 20th, 2020
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.14 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. namespace Example
  4. {
  5.     public class Graph
  6.     {
  7.         private class Node //вложенный класс для скрытия данных и алгоритмов
  8.         {
  9.             private int[,] array; //матрица смежности
  10.             public int this[int i, int j] //индексатор для обращения к матрице смежности
  11.             {
  12.                 get
  13.                 {
  14.                     return array[i, j];
  15.                 }
  16.                 set
  17.                 {
  18.                     array[i, j] = value;
  19.                 }
  20.             }
  21.             public int Size //свойство для получения размерности матрицы смежности
  22.             {
  23.                 get
  24.                 {
  25.                     return array.GetLength(0);
  26.                 }
  27.             }
  28.             private bool[] nov; //вспомогательный массив: если i-ый элемент массива равен
  29.                                 //true, то i-ая вершина еще не просмотрена; если i-ый
  30.                                 //элемент равен false, то i-ая вершина просмотрена
  31.             public void NovSet() //метод помечает все вершины графа как непросмотреные
  32.             {
  33.                 for (int i = 0; i < Size; i++)
  34.                 {
  35.                     nov[i] = true;
  36.                 }
  37.             }
  38.             //конструктор вложенного класса, инициализирует матрицу смежности и
  39.             // вспомогательный массив
  40.             public Node(int[,] a)
  41.             {
  42.                 array = a;
  43.                 nov = new bool[a.GetLength(0)];
  44.             }
  45.  
  46.         public Node Delete(int a, int b)
  47.         {
  48.             for (int i = 0; i < this.Size; i++)
  49.                 for (int j = 0; j < this.Size; j++)
  50.                     if ((i == a && j == b) || (j == a && i == b))
  51.                         {
  52.                             this[i, j] = 0;
  53.                             this[j, i] = 0;
  54.                         }
  55.             return this;
  56.         }
  57.  
  58.  
  59.  
  60.  
  61.         } //конец вложенного клаcса
  62.         private Node graph; //закрытое поле, реализующее АТД «граф»
  63.         public Graph(string name) //конструктор внешнего класса
  64.         {
  65.             using (StreamReader file = new StreamReader(name))
  66.             {
  67.                
  68.                 int n = int.Parse(file.ReadLine());
  69.                 int[,] a = new int[n, n];
  70.                 for (int i = 0; i < n; i++)
  71.                 {
  72.                     string[] mas = file.ReadLine().Split(' ');
  73.                     for (int j = 0; j < n; j++)
  74.                     {
  75.                         a[i, j] = int.Parse(mas[j]);
  76.                        
  77.                     }
  78.                 }
  79.                 graph = new Node(a);
  80.             }
  81.         }
  82.         //метод выводит матрицу смежности на консольное окно
  83.         public void Show()
  84.         {
  85.             using (StreamWriter output = new StreamWriter(@"C:\Users\CryDone\Desktop\practice\output.txt"))
  86.             {
  87.             for (int i = 0; i < graph.Size; i++)
  88.             {
  89.                 for (int j = 0; j < graph.Size; j++)
  90.                 {
  91.                     output.Write("{0,4}", graph[i, j]);
  92.                 }
  93.                 output.WriteLine();
  94.             }
  95.             }
  96.         }
  97.        
  98.         public void ToDelete(int a, int b)
  99.         {
  100.             graph.Delete(a, b);
  101.         }
  102.  
  103.  
  104.     }
  105.  
  106.     class Program
  107.     {
  108.         static void Main()
  109.         {
  110.             Graph g = new Graph(@"C:\Users\CryDone\Desktop\practice\input.txt");
  111.             Console.Write("Укажите вершины a и b:\n");
  112.             int a, b;
  113.             a = int.Parse(Console.ReadLine()) -1;
  114.             b = int.Parse(Console.ReadLine()) -1;
  115.             g.ToDelete(a,b);
  116.             g.Show();
  117.            
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement