using System; using System.Collections.Generic; using System.Linq; using Graph; using Interfaces; namespace TSP { public class City : IVertex, IComparable> { public int Id { get; set; } public double Key { get => this[Parent].Weight; set => Key = value; } public int Parent { get; set; } = -1; public List Edges { get; set; } = new List(); // indexer for accessing edge with v of index public Road this[int index] { get => Edges.Find(edge => edge.V == index); } public City() { } public City(int id) => Id = id; public City(int id, List edges) : this(id) => Edges = edges; public City(City vertex) { Id = vertex.Id; Parent = vertex.Parent; foreach (Road edge in vertex.Edges) { Road newEdge = new Road(edge.U, edge.V, edge.Weight); Edges.Add(newEdge); } } public City(Vertex, double> vertex) { Id = vertex.Id; Parent = vertex.Parent; foreach (Edge edge in vertex.Edges) { Road newEdge = new Road(edge.U, edge.V, edge.Weight); Edges.Add(newEdge); } } public int CompareTo(INode node) => Key.CompareTo(node.Key); public override string ToString() => $"{Id} {String.Join(" ", Edges.Select(e => (e.V, e.Weight)))}"; } }