Advertisement
vencinachev

Chemistry

Nov 7th, 2021
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Chemistry
  8. {
  9.     public class Node<T>
  10.     {
  11.         private T value;
  12.  
  13.         public T Value
  14.         {
  15.             get
  16.             {
  17.                 return this.value;
  18.             }
  19.             set
  20.             {
  21.                 this.value = value;
  22.             }
  23.         }
  24.  
  25.  
  26.         public Node(T value)
  27.         {
  28.             this.Value = value;
  29.         }
  30.  
  31.         public override string ToString()
  32.         {
  33.             return this.value.ToString();
  34.         }
  35.  
  36.         public override bool Equals(object obj)
  37.         {
  38.             Node<T> n = obj as Node<T>;
  39.             return n.Value.Equals(this.Value);
  40.         }
  41.  
  42.         public override int GetHashCode()
  43.         {
  44.             return this.value.GetHashCode();
  45.         }
  46.     }
  47.  
  48.     class Graph<T>
  49.     {
  50.         private Dictionary<Node<T>, List<Node<T>>> adj;
  51.  
  52.         public Graph()
  53.         {
  54.             adj = new Dictionary<Node<T>, List<Node<T>>>();
  55.         }
  56.  
  57.         public void AddNode(Node<T> node)
  58.         {
  59.             if (!this.adj.ContainsKey(node))
  60.             {
  61.                 this.adj[node] = new List<Node<T>>();
  62.             }
  63.         }
  64.  
  65.         public void AddEdge(Node<T> source, Node<T> dest)
  66.         {
  67.             if (!adj.ContainsKey(source))
  68.             {
  69.                 throw new ArgumentException("Nodes not existing!");
  70.             }
  71.             if (adj[source].Contains(dest))
  72.             {
  73.                 return;
  74.                 //throw new Exception("Edge already exist!");
  75.             }
  76.             adj[source].Add(dest);
  77.         }
  78.  
  79.         public bool HasEdge(Node<T> src, Node<T> dest)
  80.         {
  81.             if (!adj.ContainsKey(src))
  82.             {
  83.                 return false;
  84.             }
  85.             if (!adj[src].Contains(dest))
  86.             {
  87.                 return false;
  88.             }
  89.             return true;
  90.         }
  91.  
  92.     }
  93.     class Program
  94.     {
  95.         static void Main(string[] args)
  96.         {
  97.             Graph<string> chemistry = new Graph<string>();
  98.             while (true)
  99.             {
  100.                 string input = Console.ReadLine();
  101.                 if (input == "end") break;
  102.                 string[] el = input.Split(' ').ToArray();
  103.                 Node<string> n1 = new Node<string>(el[0]);
  104.                 Node<string> n2 = new Node<string>(el[1]);
  105.                 chemistry.AddNode(n1);
  106.                 chemistry.AddNode(n2);
  107.                 chemistry.AddEdge(n1, n2);
  108.             }
  109.             while (true)
  110.             {
  111.                 string input = Console.ReadLine();
  112.                 if (input == "end") break;
  113.                 string[] el = input.Split('-').ToArray();
  114.                 string[] el2 = el[1].Split(',').ToArray();
  115.                 Node<string> n1 = new Node<string>(el[0]);
  116.                 foreach (var item in el2)
  117.                 {
  118.                     Node<string> n2 = new Node<string>(item);
  119.                     if (chemistry.HasEdge(n1, n2))
  120.                     {
  121.                         Console.WriteLine($"{el[0]}-{item}");
  122.                     }
  123.                 }
  124.             }
  125.         }
  126.     }
  127. }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement