public void Can_create_clones() { var a = new Node("A"); var b = new Node("B"); var ab = new Edge(a, b); var clone = ab.Clone(); Assert.Equal(ab.Source, clone.Source); Assert.Equal(ab.Target, clone.Target); Assert.Equal(ab, clone); Assert.NotEqual(ab.Id, clone.Id); }
/// <summary> /// removes edges which are not reachable from the initial vertex /// </summary> /// <param name="edgeToGo">from the vertix i we go to edgeToGo[i]</param> /// <param name="source">the sources where we can start the game</param> internal void CleanTheStrategy(Edge[] edgeToGo,int[] source) { Queue q=new Queue(); foreach(int s in source) q.Enqueue(s); Edge []ls=edgeToGo.Clone() as Edge[]; while(q.Count>0){ int v=(int)q.Dequeue(); if(IsChoicePoint(v)) foreach(Edge l in EdgesAtVertex(v)) q.Enqueue(l.target); else if(v<ls.Length){ Edge l=ls[v]; if(l!=null){ q.Enqueue(l.target); ls[v]=null; } } } //eraze everything non-reachable from the source for(int i=0;i<ls.Length;i++) if(ls[i]!=null) edgeToGo[i]=null; }