Advertisement
Matixs

Untitled

May 13th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.34 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Lab7Exc2
  9. {
  10.     internal class Program
  11.     {
  12.  
  13.         static void Main(string[] args)
  14.         {
  15.             Graph g = null;
  16.             int[] vertexCover = null;
  17.             while (true)
  18.             {
  19.                 Console.Clear();
  20.                 Console.WriteLine("1. Set graph from console");
  21.                 Console.WriteLine("2. Set graph from file");
  22.                 Console.WriteLine("3. Set vertex cover");
  23.                 Console.WriteLine("4. Export vertex cover to file");
  24.                 Console.WriteLine("5. Print graph");
  25.                 Console.WriteLine("6. Exit");
  26.  
  27.                 Console.WriteLine("Example for import:");
  28.                 Console.WriteLine("4");
  29.                 Console.WriteLine("0 // the constant is always set");
  30.                 Console.WriteLine("1 3 2");
  31.                 Console.WriteLine("2 1 3");
  32.                 Console.WriteLine("3 1 2 4" );  
  33.                 Console.WriteLine("4 3");
  34.                 Console.Write("Input: ");
  35.  
  36.  
  37.  
  38.                 int choice;
  39.                 if (!int.TryParse(Console.ReadLine(), out choice) || choice < 1 || choice > 6)
  40.                 {
  41.                     Console.WriteLine("Invalid choice, please try again");
  42.                     Console.ReadKey();
  43.                     continue;
  44.                 }
  45.  
  46.                 switch (choice)
  47.                 {
  48.                     case 1:
  49.                         g = Graph.SetGraphFromConsole(false);
  50.                         Console.ReadKey();
  51.                         break;
  52.                     case 2:
  53.                         try
  54.                         {
  55.                             Console.Write("Enter the file name: ");
  56.                             string fileName = Console.ReadLine();
  57.                            
  58.                             g = Graph.SetGraphFromFile(fileName);
  59.  
  60.                             Console.ReadKey();
  61.                         }
  62.                         catch (Exception e)
  63.                         {
  64.                             Console.WriteLine("Error: " + e.Message);
  65.                         }
  66.                         break;
  67.                     case 3:
  68.                         try
  69.                         {
  70.                             if (g == null)
  71.                             {
  72.                                 Console.WriteLine("Graph not set");
  73.                                 Console.ReadKey();
  74.                                 break;
  75.                             }
  76.                             vertexCover = FindVertexCover(g);
  77.                             Console.WriteLine("Vertex cover: " + string.Join(" ", vertexCover));
  78.                             Console.ReadKey();
  79.                         }
  80.                         catch (Exception e)
  81.                         {
  82.                             Console.WriteLine("Error: " + e.Message);
  83.                         }
  84.                         break;
  85.                     case 4:
  86.                         try
  87.                         {
  88.                             if (g == null)
  89.                             {
  90.                                 Console.WriteLine("Graph not set");
  91.                                 Console.ReadKey();
  92.                                 break;
  93.                             }
  94.                             Console.Write("Enter the file name: ");
  95.                             string fileName = Console.ReadLine();
  96.                             using (StreamWriter sw = new StreamWriter(fileName))
  97.                             {
  98.                                 vertexCover = FindVertexCover(g);
  99.                                 sw.WriteLine(string.Join(" ", vertexCover));
  100.                             }
  101.                             Console.ReadKey();
  102.                         }
  103.                         catch (Exception e)
  104.                         {
  105.                             Console.WriteLine("Error: " + e.Message);
  106.                         }
  107.                         break;
  108.                     case 5:
  109.                         if (vertexCover == null)
  110.                         {
  111.                             Console.WriteLine("Vertex cover not set");
  112.                             Console.ReadKey();
  113.                             break;
  114.                         }
  115.                         g.VisualizeVertexCover(vertexCover);
  116.                         Console.ReadKey();
  117.                         break;
  118.                     case 6:
  119.                         return;
  120.                 }
  121.             }
  122.         }
  123.  
  124.         public static int[] FindVertexCover(Graph g)
  125.         {
  126.             bool[] visited = new bool[g.NumVertices + 1];
  127.             int[] cover = new int[g.NumVertices];
  128.             int coverSize = 0;
  129.             for (int i = 1; i <= g.NumVertices; i++)
  130.             {
  131.                 if (!visited[i])
  132.                 {
  133.                     visited[i] = true;
  134.                     cover[coverSize++] = i;
  135.                     var current = g.AdjList[i];
  136.                     while (current != null)
  137.                     {
  138.                         visited[current.Value] = true;
  139.                         current = current.Next;
  140.                     }
  141.                 }
  142.             }
  143.             Array.Resize(ref cover, coverSize);
  144.             return cover;
  145.         }
  146.  
  147.  
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement