Advertisement
Guest User

Untitled

a guest
Sep 26th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.28 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 ConsoleApplication2
  8. {
  9.     public class Point
  10.     {
  11.         public int x;
  12.         public int y;
  13.         public int number;
  14.     }
  15.  
  16.     public class Edge
  17.     {
  18.         public Edge(Point p1, Point p2)
  19.         {
  20.             this.p1 = p1;
  21.             this.p2 = p2;
  22.         }
  23.         public Point p1;
  24.         public Point p2;
  25.  
  26.         public int Distance()
  27.         {
  28.             return Math.Abs(p1.x - p2.x)+ Math.Abs(p1.y - p2.y);
  29.         }
  30.     }
  31.  
  32.    
  33.    
  34.     class Program
  35.     {
  36.         static void Main(string[] args)
  37.         {
  38.             var V = new List<Point>();
  39.             var L = new List<Edge>();
  40.             var name = new Dictionary<Point, int>();
  41.             var size = new Dictionary<Point, int>();
  42.             var prev = new Dictionary<Point, int>();
  43.             for (int i=0; i< V.Count; i++)
  44.                 for (int j = i + 1; j < V.Count; j++)
  45.                 {
  46.                     L.Add(new Edge(V[i], V[j]));
  47.                     var edges = L.OrderBy(x => x.Distance()).ToList();
  48.  
  49.                     foreach (var v in V)
  50.                     {
  51.                         name[v] = v.number;
  52.                         size[v] = 1;
  53.                         prev[v] = v.number;
  54.                     }
  55.                     var T = new HashSet<Point>();
  56.                     while (T.Count < V.Count - 1)
  57.                     {
  58.                         var edge = edges.First();
  59.                         //edges = edges.RemoveAt(0);
  60.                         var p = edge.p1;
  61.                         var q = edge.p2;
  62.                         if (p != q)
  63.                         {
  64.                             if (size[q] < size[p])
  65.                             {
  66.  
  67.                                 prcdr(edge, p, q);
  68.                                 name[edge.p1] = p.number;
  69.                                 var u = prev[edge.p2];
  70.                                 while (name[u] != p.number)
  71.                                     u = prev[u];
  72.                             }
  73.                             else
  74.                                 prcdr(edge, q, p);
  75.                         }
  76.                     }
  77.                 }
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement