public VertexWirth(int key, int count, VertexWirth next, EdgeWirth trail) { Key = key; this.count = count; Next = next; Trail = trail; }
public VertexWirth(int key, int count, VertexWirth next, EdgeWirth trail, object data = null) { Key = key; this.count = count; Next = next; Trail = trail; Data = data; }
public bool AddVertex(int val, object data = null) { if (root != null) { root.GetEnd().Next = new VertexWirth(GetKey(), val, data); } else { root = new VertexWirth(GetKey(), val, data); } return(true); }
private void DFS(VertexWirth vertex, ref List <int> visited) { visited.Add(vertex.Key); var trail = vertex.Trail; while (trail != null) { if (!visited.Contains(trail.Id.Key)) { DFS(trail.Id, ref visited); } trail = trail.Next; } }
private bool DeleteDirectEdge(VertexWirth f, VertexWirth t) { EdgeWirth previous = null; var edge = f.Trail; while (edge != null) { if (edge.Id.Key == t.Key) { if (!edge.Direct) { return(false); } var next = edge.Next; if (previous == null) { if (next == null) { f.Trail = null; } else { f.Trail = next; } } else { if (next == null) { previous.Next = null; } else { previous.Next = next; } } return(true); } previous = edge; edge = edge.Next; } return(false); }
public bool AddVertex(int key, int val, object data = null) { var f = Find(key); if (f != null) { return(false); } RenewKey(key); if (root != null) { root.GetEnd().Next = new VertexWirth(key, val, data); } else { root = new VertexWirth(key, val, data); } return(true); }
public EdgeWirth(VertexWirth id, EdgeWirth next, int weight, bool direct) : this(id, next, weight) { Direct = direct; }
public EdgeWirth(VertexWirth id, EdgeWirth next, int weight) : this(id, next) { Weight = weight; }
public EdgeWirth(VertexWirth id, int weight) : this(id) { Weight = weight; }
public EdgeWirth(VertexWirth id, EdgeWirth next) { Id = id; Next = next; }
public EdgeWirth(VertexWirth id) { Id = id; }
public GraphWirth(int key, int value) { root = new VertexWirth(key, value); RenewKey(key); }
public bool DeleteVertex(int key) { if (root == null) { return(false); } var f = Find(key);//находим вершину, которую собираемся удалить if (f == null) { return(false); } VertexWirth previous = null; //предыдущая вершина var edge = root; //переменная для перебора вершин while (edge != null) //ищем вершину в списке вершин { if (edge.Key == f.Key) //нашли { var r = root; while (r.Next != null) //теперь убираем все ребра, которые ведут в эту вершину { var tmp = r.Trail; //идем по следу while (tmp != null) { if (tmp.Id.Key == f.Key) //нашли ребро в удаляемую вершину { if (tmp.Direct) //го его удалим { DeleteDirectEdge(r.Key, f.Key); } else { DeleteUndirectEdge(r.Key, f.Key); } } tmp = tmp.Next; } r = r.Next; } var trail = f.Trail; while (trail != null)//убираем ребра, ведущие из этой вершины (на всякий) { trail.Id = null; var tmp = trail.Next; trail.Next = null; trail = tmp; } var next = edge.Next; //ну и наконец удаляем ссылку на вершину из списка вершин if (previous == null) //образовавшуюся дырочку (если есть) заштопаем { root = root.Next; } else { if (next != null) { previous.Next = next; } else { previous.Next = null; } } return(true);//вы восхитительны } previous = edge; edge = edge.Next; } return(false);//как }
public GraphWirth(int value) { root = new VertexWirth(GetKey(), value); }
public GraphWirth() { root = new VertexWirth(GetKey(), 0); }