Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- public class Point
- {
- public int x;
- public int y;
- public int number;
- }
- public class Edge
- {
- public Edge(Point p1, Point p2)
- {
- this.p1 = p1;
- this.p2 = p2;
- }
- public Point p1;
- public Point p2;
- public int Distance()
- {
- return Math.Abs(p1.x - p2.x)+ Math.Abs(p1.y - p2.y);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var V = new List<Point>();
- var L = new List<Edge>();
- var name = new Dictionary<Point, int>();
- var size = new Dictionary<Point, int>();
- var prev = new Dictionary<Point, int>();
- for (int i=0; i< V.Count; i++)
- for (int j = i + 1; j < V.Count; j++)
- {
- L.Add(new Edge(V[i], V[j]));
- var edges = L.OrderBy(x => x.Distance()).ToList();
- foreach (var v in V)
- {
- name[v] = v.number;
- size[v] = 1;
- prev[v] = v.number;
- }
- var T = new HashSet<Point>();
- while (T.Count < V.Count - 1)
- {
- var edge = edges.First();
- //edges = edges.RemoveAt(0);
- var p = edge.p1;
- var q = edge.p2;
- if (p != q)
- {
- if (size[q] < size[p])
- {
- prcdr(edge, p, q);
- name[edge.p1] = p.number;
- var u = prev[edge.p2];
- while (name[u] != p.number)
- u = prev[u];
- }
- else
- prcdr(edge, q, p);
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement