public void search_breadth_first()
        {
            var a = new Vertex <string>
            {
                Value = "Cat"
            };
            var b = new Vertex <string>
            {
                Value = "Rat"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };
            var d = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            a.AddEdge(d);
            var graph = new Graph <string>();

            graph.AddVertex(a);
            graph.AddVertex(b);
            graph.AddVertex(c);
            graph.AddVertex(d);
            var bfsSearcher = new BreadthFirstSearcher <string>();

            var result = bfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(d);
        }
Example #2
0
        public void only_search_nodes_on_graph()
        {
            var a = new Vertex <string>
            {
                Value = "Cat"
            };
            var b = new Vertex <string>
            {
                Value = "Rat"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };
            var d = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            a.AddEdge(d);
            var graph = new Graph <string>();

            graph.AddVertex(a);
            graph.AddVertex(b);
            graph.AddVertex(c);
            var dfsSearcher = new DepthFirstSearcher <string>();

            var result = dfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(c);
        }
Example #3
0
        private static void PrimAlgorithmn()
        {
            List <Vertex> graph = new List <Vertex>();

            Vertex a = new Vertex("A");
            Vertex b = new Vertex("B");
            Vertex c = new Vertex("C");
            Vertex d = new Vertex("D");
            Vertex e = new Vertex("E");

            Edge ab = new Edge(2);

            a.AddEdge(b, ab);
            b.AddEdge(a, ab);
            Edge ac = new Edge(3);

            a.AddEdge(c, ac);
            c.AddEdge(a, ac);
            Edge bc = new Edge(2);

            b.AddEdge(c, bc);
            c.AddEdge(b, bc);
            Edge be = new Edge(5);

            b.AddEdge(e, be);
            e.AddEdge(b, be);
            Edge cd = new Edge(1);

            c.AddEdge(d, cd);
            d.AddEdge(c, cd);
            Edge ce = new Edge(1);

            c.AddEdge(e, ce);
            e.AddEdge(c, ce);

            graph.Add(a);
            graph.Add(b);
            graph.Add(c);
            graph.Add(d);
            graph.Add(e);

            Console.WriteLine("****************");
            Console.WriteLine("\n");
            Prim MyPrimAlgo = new Prim(graph);

            Console.WriteLine("Graph before Prim");
            Console.WriteLine(MyPrimAlgo.OriginalGraphToString());
            Console.ReadLine();
            Console.WriteLine("Graph after Prim");
            MyPrimAlgo.Run();
            MyPrimAlgo.ResetPrintHistory();
            Console.WriteLine(MyPrimAlgo.MinimumSpanningTreeToString());
            Console.WriteLine("****************");
            Console.WriteLine("\n");
            Console.ReadLine();
        }
Example #4
0
        public void search_depth_first()
        {
            var a = new Vertex <string>
            {
                Value = "Cat"
            };
            var b = new Vertex <string>
            {
                Value = "Rat"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };
            var d = new Vertex <string>
            {
                Value = "Turtle"
            };
            var e = new Vertex <string>
            {
                Value = "Parrot"
            };
            var f = new Vertex <string>
            {
                Value = "Raccoon"
            };
            var g = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            a.AddEdge(d);
            d.AddEdge(e);
            e.AddEdge(f);
            f.AddEdge(g);
            var graph = new Graph <string>();

            graph.AddVertex(a);
            graph.AddVertex(b);
            graph.AddVertex(c);
            graph.AddVertex(d);
            graph.AddVertex(e);
            graph.AddVertex(f);
            graph.AddVertex(g);

            var dfsSearcher = new DepthFirstSearcher <string>();

            var result = dfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(g);
        }
Example #5
0
    // Adds an edge without weights if Weighted layer is not present
    public void AddEdge(Vertex start, Neighbor theNeighbor)
    {
        start.AddEdge(theNeighbor);
        Vertex end = theNeighbor.neighbor;

        end.AddEdge(new  Neighbor(start));
    }
Example #6
0
        public void return_null_if_starting_vertex_not_in_graph()
        {
            var a = new Vertex <string>
            {
                Value = "Dog"
            };
            var b = new Vertex <string>
            {
                Value = "Dog"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            var graph = new Graph <string>();

            graph.AddVertex(b);
            var dfsSearcher = new DepthFirstSearcher <string>();

            var result = dfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(null);
        }
Example #7
0
    public Edge(Vertex v1, Vertex v2)
    {
        Debug.LogFormat("Creating new edge between {0} and {1}", v1.number, v2.number);

        this.v1 = v1;
        this.v2 = v2;

        v1.AddEdge(this);
        v2.AddEdge(this);

        linepiece               = CalculateLinepieceValues();
        lineObject              = new GameObject();
        lineObject.name         = "EdgeDebugObject";
        lineRenderer            = lineObject.AddComponent <LineRenderer>();
        lineRenderer.material   = Paper.Instance.LineMaterial;
        lineRenderer.startWidth = 0.05f;
        lineRenderer.endWidth   = 0.05f;
        UpdateLineRenderer(null);

        debugText               = lineObject.AddComponent <TextMesh>();
        debugText.color         = Color.black;
        debugText.characterSize = 0.2f;

        lineObject.transform.position = (v1.transform.position + v2.transform.position) / 2f;

        Paper.Instance.NewEdge(this, out number);
    }
Example #8
0
 public void AddNeighbor(Vertex <T> vertex1, Vertex <T> vertex2)
 {
     if (!vertex1.Neighbors.Contains(vertex2))
     {
         vertex1.AddEdge(vertex2);
     }
 }
Example #9
0
 private void AddNeighbor(Vertex <T> first, Vertex <T> second)
 {
     if (!first.Neighbors.Contains(second))
     {
         first.AddEdge(second);
     }
 }
Example #10
0
    public bool AddEdge(int v1, int v2, float cost)
    {
        // Check if edge already exists
        foreach (Edge edge in edges)
        {
            if (cost == edge.cost)
            {
                if ((edge.vertex1.id == v1 && edge.vertex2.id == v2) || (edge.vertex1.id == v2 && edge.vertex2.id == v1))
                {
                    // Edge already exists
                    return(false);
                }
            }
        }

        Vertex ver1 = GauranteeVertex(v1);
        Vertex ver2 = GauranteeVertex(v2);

        Transform trans   = Instantiate(edgePrefab.transform);
        Edge      newEdge = trans.GetComponent <Edge>();

        newEdge.vertex1 = ver1;
        newEdge.vertex2 = ver2;
        newEdge.cost    = cost;
        newEdge.RefreshConnection();

        edges.Add(newEdge);

        ver1.AddEdge(newEdge);
        ver2.AddEdge(newEdge);
        UpdateEncoding();

        return(true);
    }
Example #11
0
            /// <summary>
            /// Adds an edge from "from" to "to". If an edge already exists, the "flagged" value is merged (using boolean OR) into
            /// the existing edge.
            /// </summary>
            public void AddEdge(P from, P to, bool flagged)
            {
                Vertex fromVertex = GetVertex(from);
                Vertex toVertex   = GetVertex(to);

                fromVertex.AddEdge(toVertex, flagged);
                return;
            }
        public void RemoveEdge_byVertexName_fail_noEdge()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            Assert.ThrowsException <ArgumentException>(() => vertex1.RemoveEdge("vertex3"));
        }
        public IEdge AddEdge(object id, string label, IVertex vertex)
        {
            if (vertex is WrappedVertex)
            {
                return(new WrappedEdge(Vertex.AddEdge(id, label, (vertex as WrappedVertex).Vertex)));
            }

            return(new WrappedEdge(Vertex.AddEdge(id, label, vertex)));
        }
        public void RemoveEdge_byVertexName_fail_vertexNull()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            Assert.ThrowsException <ArgumentNullException>(() => vertex1.RemoveEdge(null as string));
        }
        public void GetEdge_byVertexRef_fail_vertexNull()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            Assert.ThrowsException <ArgumentNullException>(() => vertex1.GetEdge(null as Vertex));
        }
        public void GetEdge_byVertexRef_ok()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);
            var edge1   = vertex1.AddEdge(vertex2);
            var edge2   = vertex1.GetEdge(vertex2);

            Assert.AreSame(edge1, edge2);
        }
        public void RemoveEdge_byEdgeRef_fail_edgeNull()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            Assert.ThrowsException <ArgumentNullException>(() => vertex1.RemoveEdge(null as Edge));
        }
        public void RemoveEdge_byVertexName_ok()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            vertex1.RemoveEdge("vertex2");
            Assert.AreEqual(0, vertex1.Edges.Count);
        }
        public void RemoveEdge_byEdgeRef_ok()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);
            var edge    = vertex1.AddEdge(vertex2);

            vertex1.RemoveEdge(edge);

            Assert.AreEqual(0, vertex1.Edges.Count);
        }
        public void RemoveEdge_byEdgeRef_fail_noEdge()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            var edge = new Edge(vertex1, new Vertex("vertex3", 0));

            Assert.ThrowsException <ArgumentException>(() => vertex1.RemoveEdge(edge));
        }
        public void AddEdge_ok()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);
            var edge1   = vertex1.AddEdge(vertex2);

            var edge2 = vertex1.Edges[0];

            Assert.AreSame(edge2.VertexTo, vertex2);
            Assert.AreSame(edge1, edge2);
        }
        public void GetEdge_byVertexRef_fail_noVertex()
        {
            var vertex1 = new Vertex("vertex1", 0);
            var vertex2 = new Vertex("vertex2", 0);

            vertex1.AddEdge(vertex2);

            var edge = vertex1.GetEdge(new Vertex("vertex3", 0));

            Assert.IsNull(edge);
        }
Example #23
0
    /// <summary>Adds an edge between the specified vertices.</summary>
    /// <param name="source">The source vertex.</param>
    /// <param name="destination">The destination vertex.</param>
    /// <remarks>The edge is inserted from Source -> Destination.</remarks>
    /// <returns>
    /// True if an edge was established, False if one or more arguments
    /// could not be resolved to valid vertices.
    /// </returns>
    public bool AddEdge(Vertex source, Vertex destination)
    {
        if (source == null || destination == null)
        {
            return(false);
        }

        source.AddEdge(destination);

        return(true);
    }
Example #24
0
        public void Vertex_AddEdge_OneEdge_Success()
        {
            // Arrange
            var vertex1 = new Vertex<string>("Vertex 1");
            var vertex2 = new Vertex<string>("Vertex 2");
            var edge = new Edge<string>("Edge 1-2", 100, vertex1, vertex2);
            var expected = 1;

            // Act
            vertex1.AddEdge(edge);

            var result = vertex1.EdgeCount();

            // Assert
            Assert.AreEqual(result, expected);
        }
Example #25
0
        public void AddEdge(string start, string end, int cost)
        {
            if (!vertexNames.ContainsKey(start))
            {
                throw new ArgumentException("Vertex name does not exist");
            }
            if (!vertexNames.ContainsKey(end))
            {
                throw new ArgumentException("Vertex name does not exist");
            }
            Vertex sourceVertex = vertexNames[start];
            Vertex targetVertex = vertexNames[end];
            Edge   newEdge      = new Edge(sourceVertex, targetVertex, cost);

            sourceVertex.AddEdge(newEdge);
            edges.Add(newEdge);
        }
        public void BreadthFirstSearchReturnsTrueWhenGraphContainsValueAndVerticesAreConnectedInCircle()
        {
            var value          = 32;
            var searchedVertex = new Vertex <int>(value);
            var otherVertex    = new Vertex <int>(3, new Vertex <int>(5));

            searchedVertex.AddEdge(otherVertex);
            otherVertex.AddEdge(searchedVertex);
            var graph = new Graph <int>(new List <Vertex <int> >()
            {
                otherVertex
            });

            var actualResult = graph.ContainsValue(value);

            Assert.True(actualResult);
        }
Example #27
0
    public void Start()
    {
        GameObject roads = GameObject.FindGameObjectWithTag("Roads");

        Vertex[] vertices = roads.GetComponentsInChildren <Vertex>();
        Bounds   bounds   = new Bounds(transform.position, Vector3.zero);
        Vector3  offset;

        foreach (Transform child in transform)
        {
            bounds.Encapsulate(child.gameObject.GetComponent <Renderer>().bounds);
        }

        if (bounds.extents.x > bounds.extents.z)
        {
            offset = new Vector3(bounds.extents.x / 2 + 30, 0, 0);
            length = (int)bounds.extents.x + 30;
        }
        else
        {
            offset = new Vector3(0, 0, bounds.extents.z / 2 + 30);
            length = (int)bounds.extents.z + 30;
        }

        positionA = transform.position + offset;
        positionB = transform.position - offset;

        foreach (Vertex vertex in vertices)
        {
            if (Vector3.Distance(vertex.transform.position, positionA) < MARGIN)
            {
                vertexA = vertex;
            }
            else if (Vector3.Distance(vertex.transform.position, positionB) < MARGIN)
            {
                vertexB = vertex;
            }
        }

        if (vertexA != null && vertexB != null)
        {
            vertexA.AddEdge(this);
            vertexB.AddEdge(this);
        }
    }
Example #28
0
        Edge3 GetEdge(List <Edge3> edges, Vertex v0, Vertex v1)
        {
            Edge3 match = v0.edges.Find(e => {
                return(e.Has(v1));
            });

            if (match != null)
            {
                return(match);
            }

            Edge3 ne = new Edge3(v0, v1);

            v0.AddEdge(ne);
            v1.AddEdge(ne);
            edges.Add(ne);
            return(ne);
        }
Example #29
0
    public void UpdateEdge(Vertex v1, Vertex v2)
    {
        Debug.LogFormat("Edge {0} contains vertices {1} and {2}, checking for {3} and {4}", number, this.v1.number, this.v2.number, v1.number, v2.number);
        if (v1 != this.v1 && v2 != this.v1)
        {
            this.v1.RemoveEdge(this);
        }
        if (v1 != this.v2 && v2 != this.v2)
        {
            this.v2.RemoveEdge(this);
        }
        this.v1 = v1;
        this.v2 = v2;
        v1.AddEdge(this);
        v2.AddEdge(this);

        UpdateLineRenderer(null);
        lineObject.transform.position = (v1.transform.position + v2.transform.position) / 2f;
    }
Example #30
0
        Edge3 GetEdge(Vertex v0, Vertex v1)
        {
            Edge3 match = v0.edges.Find(e =>
            {
                return(e.a == v1 || e.b == v1);
            });

            if (match != null)
            {
                return(match);
            }

            Edge3 ne = new Edge3(v0, v1);

            edges.Add(ne);
            v0.AddEdge(ne);
            v1.AddEdge(ne);
            return(ne);
        }
Example #31
0
    public void AddEdge(Vector3 v1Coord, Vector3 v2Coord)
    {
        Vertex v1 = null, v2 = null;

        for (int i = Vertices.Count - 1; i >= 0; --i)
        {
            if (Vertices[i].Coord == v1Coord)
            {
                v1 = Vertices[i];
            }
            else if (Vertices[i].Coord == v2Coord)
            {
                v2 = Vertices[i];
            }
            if (v1 != null && v2 != null)
            {
                break;
            }
        }

        if (v1 == null || v2 == null)
        {
            return;
        }

        float length = 1.0f;

        if ((int)v2.Coord.x != (int)v1.Coord.x && (int)v2.Coord.z != (int)v1.Coord.z)
        {
            length = 1.4f;
        }

        var edge = new Edge(v1, v2, length); //(float)Math.Sqrt(Math.Pow(Math.Abs(v2.Coord.x - v1.Coord.x),2) + Math.Pow(Math.Abs(v2.Coord.z - v1.Coord.z),2)));

        if (!v1.Edges.Exists(e => e.CompareTo(edge) == 0))
        {
            v1.AddEdge(edge);
        }
        if (!v2.Edges.Exists(e => e.CompareTo(edge) == 0))
        {
            v2.AddEdge(edge);
        }
    }
Example #32
0
 public virtual void AddEdge( Vertex start,  Neighbor theNeighbor )
 {
     start.AddEdge( theNeighbor );
 }
Example #33
0
 // Adds an edge without weights if Weighted layer is not present
 public void AddEdge( Vertex start,   Neighbor theNeighbor ) 
 {
     start.AddEdge( theNeighbor );
     Vertex end = theNeighbor.neighbor;
     end.AddEdge( new  Neighbor( start ) );
 }