ellapt

MinSpanningCabling

Jun 22nd, 2013
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.34 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace T2.MinSpanningCabling
  5. {
  6.     /// <summary>
  7.     /// Using the Prim's algorithm to find the minimum spanning tree in case of cabling a new neighborhood
  8.     /// </summary>
  9.     class MinCabling
  10.     {
  11.         public static void Main()
  12.         {
  13.             Console.WriteLine("A TV company needs to lay cables to a new neighborhood (for every house).");
  14.             Console.WriteLine("Some of the paths are longer. Find a way to minimize the cost for cables.\n");
  15.             SortedSet<Edge> priority = new SortedSet<Edge>();
  16.             int numberOfNodes = 8;
  17.             bool[] used = new bool[numberOfNodes + 1];
  18.             List<Edge> mpdNodes = new List<Edge>();
  19.             List<Edge> edges = new List<Edge>();
  20.             InitializeGraph(edges);
  21.  
  22.             Console.WriteLine("The paths from house to house are:");
  23.  
  24.             //adding edges that connect the node 1 with all the others - 2, 3, 4
  25.             for (int i = 0; i < edges.Count; i++)
  26.             {
  27.                 Console.WriteLine("{0}",edges[i]);
  28.                 if (edges[i].StartNode == edges[0].StartNode)
  29.                 {
  30.                     priority.Add(edges[i]);
  31.                 }
  32.             }
  33.             used[edges[0].StartNode] = true;
  34.  
  35.             FindMinimumSpanningTree(used, priority, mpdNodes, edges);
  36.  
  37.             PrintMinimumSpanningTree(mpdNodes);
  38.         }
  39.  
  40.         private static void PrintMinimumSpanningTree(List<Edge> mpdNodes)
  41.         {
  42.             Console.WriteLine("The minimum spanning tree to minimize the cabling expenses:");      
  43.             for (int i = 0; i < mpdNodes.Count; i++)
  44.             {
  45.                 Console.WriteLine("{0}", mpdNodes[i]);
  46.             }
  47.         }
  48.  
  49.         private static void FindMinimumSpanningTree(bool[] used, SortedSet<Edge> priority, List<Edge> mpdEdges, List<Edge> edges)
  50.         {
  51.             while (priority.Count > 0)
  52.             {
  53.                 Edge edge = priority.Min;
  54.                 priority.Remove(edge);
  55.  
  56.                 if (!used[edge.EndNode])
  57.                 {
  58.                     used[edge.EndNode] = true; //we "visit" this node
  59.                     mpdEdges.Add(edge);
  60.                     AddEdges(edge, edges, mpdEdges, priority, used);
  61.                 }
  62.             }
  63.         }
  64.  
  65.         private static void AddEdges(Edge edge, List<Edge> edges, List<Edge> mpd, SortedSet<Edge> priority, bool[] used)
  66.         {
  67.             for (int i = 0; i < edges.Count; i++)
  68.             {
  69.                 if (!mpd.Contains(edges[i]))
  70.                 {
  71.                     if (edge.EndNode == edges[i].StartNode && !used[edges[i].EndNode])
  72.                     {
  73.                         priority.Add(edges[i]);
  74.                     }
  75.                 }
  76.             }
  77.         }
  78.  
  79.         private static void InitializeGraph(List<Edge> edges)
  80.         {
  81.             edges.Add(new Edge(1, 3, 5));
  82.             edges.Add(new Edge(1, 2, 4));
  83.             edges.Add(new Edge(1, 4, 9));
  84.             edges.Add(new Edge(2, 4, 2));
  85.             edges.Add(new Edge(3, 4, 20));
  86.             edges.Add(new Edge(3, 5, 7));
  87.             edges.Add(new Edge(4, 5, 8));
  88.             edges.Add(new Edge(4, 7, 6));
  89.             edges.Add(new Edge(5, 6, 12));
  90.             edges.Add(new Edge(6, 8, 2));
  91.             edges.Add(new Edge(7, 8, 4));
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment