/// <summary> /// Searches all connected vertices from the source by BFS. /// </summary> /// <param name="source">First Vertice to be search</param> public string BuscaEmLargura(int source) { int count = 0; string out_put = ""; int[] num = new int[Vertices.Count]; for (int n = 0; n < Vertices.Count; n++) { num[n] = -1; } Queue <int> fila = new Queue <int>(); num[source] = count++; fila.Enqueue(source); while (fila.Count > 0) { var vertex = fila.Dequeue(); out_put += BuscaVertice(vertex).Label; foreach (var n in Adj.get_Adj()[vertex]) { if (num[n] == -1) { num[n] = count++; fila.Enqueue(n); } } } fila.Clear(); return(out_put); }
public bool VillageCheck() { if (Empty) { return(false); } return(Adj.All(r => r.Empty)); }
/// <summary> /// Adds Aresta into Grafo /// </summary> /// <param name="a">TODO</param> /// <returns></returns> public bool RemoveAresta(Aresta a) { if (a.isDirected == isDigraph) { Arestas.Remove(a); Adj.remove_adj(a); } return(false); }
public override bool DeleteVertex(Vertex <TVertex> vertex) //TODO: delete all edges { int i; for (i = 0; i < Adj.Count; i++) { if (Adj[i].AdjIndex == vertex.Index) { break; } } if (i == Adj.Count && Adj[i].AdjIndex != vertex.Index) { return(false); //не нашли вершину } if (Oriented) //если ориентированный, удаляем список, проходим по всем спискам в поисках ребер { EdgesCount = EdgesCount - Adj[i].Length; Adj.Remove(Adj[i]); //удалили вершину for (int j = 0; j < Adj.Count; j++) //ищем и удаляем ребра { for (var q = Adj[j].Head; q != null; q = q.Next) { if (q == null) { break; } // Adj[i].DeleteNode(q.AdjEdge.Vertex1, vertex); //Adj[i].DeleteNode(q.AdjEdge.Vertex2, vertex); DeleteEdge(q.AdjEdge.Vertex1, vertex); // DeleteEdge(q.AdjEdge.Vertex2, vertex); } // Adj[j].DeleteNode(vertex); } Vertexes.Remove(vertex); return(true); } else //если неориентированный, удаляем обратные ребра, потом удаляем строчку { for (var q = Adj[i].Head; q != null; q = q.Next) { if (q == null) { break; } DeleteEdge(q.AdjEdge.Vertex1, q.AdjEdge.Vertex2); //удаляем ребра // DeleteEdge(q.AdjEdge.Vertex2, q.AdjEdge.Vertex1); } Adj.Remove(Adj[i]); Vertexes.Remove(vertex); return(true); } }
/// <summary> /// GrauMédio /// </summary> /// <returns></returns> public double GrauMedio() { int n = NumVertices(); int sum = 0; for (int i = 0; i < n; i++) { sum += Adj.get_Adj()[i].Count; } return(sum / n); }
/** * Get the neighboring GameObject by named position **/ Tile GetAdjacent(Adj pos) { var adjRow = Row; var adjCol = Col; if (pos == Adj.Left) { adjCol = Col - 1; } else if (pos == Adj.TopLeft) { adjCol = Col - 1; adjRow = Row + 1; } else if (pos == Adj.Top) { adjRow = Row + 1; } else if (pos == Adj.TopRight) { adjCol = Col + 1; adjRow = Row + 1; } else if (pos == Adj.Right) { adjCol = Col + 1; } else if (pos == Adj.BottomRight) { adjCol = Col + 1; adjRow = Row - 1; } else if (pos == Adj.Bottom) { adjRow = Row - 1; } else if (pos == Adj.BottomLeft) { adjRow = Row - 1; adjCol = Col - 1; } // Now that we have the right row/col for the desired neighbor // Make sure that it actually exists, otherwise return null if (valid(adjRow) && valid(adjCol)) { return(boardCreator.Grid[adjRow][adjCol].GetComponent <Tile>()); } else { return(null); } }
public override Vertex <TVertex> AddVertex() //добавление вершины { var v = new Vertex <TVertex>(); v.Index = CurrentIndex; Vertexes.Add(v); var A = new AdjList <TVertex, TEdge, TData, TWeight>(); A.AdjIndex = CurrentIndex; Adj.Add(A); CurrentIndex++; return(v); }
/// <summary> /// Recursive search by depth. /// </summary> /// <param name="v"></param> /// <param name="visited"></param> protected void DFS_search(int v, bool[] visited, Action action)//TODO { visited[v] = true; action(); foreach (var n in Adj.get_Adj()[v]) { if (!visited[n]) { DFS_search(n, visited, action); } } }
public bool IsValidOrigin() { // Valid origin regions are // 1) Not empty // 2) Not already villages // 3a) Have fewer than 7 huts, or // 3b) Have the same number or fewer huts than a neighbor if (Empty || Village) { return(false); } if (Huts.Sum() < 7 || Huts.Sum() <= Adj.Max(r => r.Huts.Sum())) { return(true); } return(false); }
class Kruskal : ShortestPath {//TODO:test, public long Run() { var L = Adj.Select((l, i) => Tuple.Create(i, l[i].Item1, l[i].Item2)).OrderBy(t => t.Item3).ToList(); //var li = new List<Tuple<int, int, long>>(); //I.REP(i =>{ foreach (var t in Adj[i]) li.Add(Tuple.Create(i, t.Item1, t.Item2));}); //li = li.OrderBy(t => t.Item3).ToList();//li = li.OrderByDescending(t => t.Item3).ToList(); var uf = new UnionFind(); uf.Init(V); long ret = 0; foreach (var t in L) { if (!uf.Same(t.Item1, t.Item2)) { ret += t.Item3; uf.Unite(t.Item1, t.Item2); } } return(ret); }
/// <summary> /// Returns the number of components from Graph /// </summary> /// <returns></returns> public int NumComponents() { bool[] marked = new bool[Vertices.Count]; Adj.Update(this); int count = 0; for (int i = 0; i < Vertices.Count; i++) { marked[i] = false; } for (int j = 0; j < Vertices.Count; j++) { if (!marked[j]) { DFS_search(j, marked, () => { }); count++; } } return(count); }
/// <summary> /// Adds Aresta into Grafo /// </summary> /// <param name="a"></param> /// <returns></returns> public bool AddAresta(Aresta a) { if (a.isDirected == isDigraph) { if (!Vertices.Contains(a.vertice1)) { Vertices.Add(a.vertice1); } if (!Vertices.Contains(a.vertice2)) { Vertices.Add(a.vertice2); } Arestas.Add(a); if (a.vertice1._id == a.vertice2._id) { isAciclic = false; // no longer aciclic } Adj.Update(this); } return(false); }
/// <summary> /// Adds Vertice into Grafo. /// </summary> /// <param name="v"></param> public void AddVertice(Vertice v) { Vertices.Add(v); Adj.Update(this); }
/// <summary> /// Overload, creates new Vertice from id and lbl. /// </summary> /// <param name="id"></param> /// <param name="lbl"></param> public void AddVertice(int id, string lbl) { Vertices.Add(new Vertice(lbl, id)); Adj.Update(this); }
/// <summary> /// Removes Vertice from Grafo. /// </summary> /// <param name="v"></param> public void RemoveVertice(Vertice v) { Adj.Clear_adj(v, this); Vertices.Remove(v); }
/// <summary> /// AdjList to string /// </summary> /// <returns></returns> public string AdjListToString() { return(Adj.ToString()); }
public void AddAdj(Region region) { Adj.Add(region); }