public edge <T> getEdgeByName(string edge) { vertex <T> source = (vertex <T>)_vertex.Where(e => e.Name == edge[0].ToString()).ToList().ElementAt(0); vertex <T> Destiantion = (vertex <T>)_vertex.Where(e => e.Name == edge[1].ToString()).ToList().ElementAt(0); return(source.getEdge(Destiantion)); }
static void Main(string[] args) { Graph <string> g1 = new Graph <string>("a,b,c,d,e,f,g", "ab,cd,ef,aa,eg", "1,2,3,4,5,6,7", "a"); Console.WriteLine(g1.getEdgeByName("ef").weight); vertex <double> a = new vertex <double>("a"); vertex <double> b = new vertex <double>("b"); vertex <double> c = new vertex <double>("c"); vertex <double> d = new vertex <double>("d"); vertex <double> e = new vertex <double>("e"); a.addEdge(b); a.addEdge(c); b.addEdge(c); b.addEdge(d); d.addEdge(c); d.addEdge(e); e.addEdge(c); Graph <double> graph1 = new Graph <double>(new List <vertex <double> > { a, b, c, d, e }); vertex <double> f = new vertex <double>("f"); graph1.addVertix(f); graph1.addEdge(e, f); Console.WriteLine(graph1.getVertex(a).Name); graph1.move(e); Console.WriteLine(graph1.currentVertex.Name); graph1.removeEdge(c, d); Console.Read(); }
public Graph(string vertecies, string edges, string values, string beginningvertex) { //spliting the string into a list of vertices string[] _verticies = vertecies.Split(','); //list of edges string[] _edges = edges.Split(','); //list of values string[] val = values.Split(','); double[] _values = new double[val.Length]; for (int i = 0; i <= _values.Length - 1; i++) { //fillig the values list _values[i] = Convert.ToDouble(val[i]); } for (int i = 0; i <= _verticies.Length - 1; i++) { //filling the verticies list vertex <T> v1 = new vertex <T>(_verticies[i], i); this.addVertix(v1); } for (int i = 0; i <= _edges.Length - 1; i++) {//adding edge this.addEdge( (vertex <T>)_vertex.Where(e => e.Name == _edges[i][0].ToString()).ToList().ElementAt(0), (vertex <T>)_vertex.Where(e => e.Name == _edges[i][1].ToString()).ToList().ElementAt(0), (T)Convert.ChangeType(_values[i], typeof(T))); } //assigning the current vertex as the first vertex in order _CurrentVertix = (vertex <T>)_vertex.Where(e => e.Name == beginningvertex).ToList().ElementAt(0); }
public void addEdge(vertex <T> TargetVertex, T weight = default(T)) { edge <T> Edge = new edge <T>(this, TargetVertex, weight); outs.Add(Edge); TargetVertex.ins.Add(Edge); if (_undirected) { //not directed , the target vertex will have the same edge edge <T> Edge2 = new edge <T>(TargetVertex, this, weight); ins.Add(Edge2); TargetVertex.outs.Add(Edge2); } }
public void removeEdge(vertex <T> TargetVertex) { //getting edge where source vertex is the current vertex and destination vertex is the vertex passed to this method edge <T> Edge = (edge <T>)outs.Where(e => e.sourceVertex == this && e.destinationVertex == TargetVertex) .ToList().ElementAt(0); outs.Remove(Edge); TargetVertex.ins.Remove(Edge); if (_undirected) { edge <T> Edge2 = (edge <T>)ins.Where(e => e.sourceVertex == TargetVertex && e.destinationVertex == this) .ToList().ElementAt(0); ins.Remove(Edge2); TargetVertex.outs.Remove(Edge2); } }
static void Main(string[] args) { /* * Graph<string> g1 = new Graph<string>("a,b,c,d,e,f,g", "ab,cd,ef,aa,eg", "1,2,3,4,5,6,7", "a"); * Console.WriteLine(g1.getEdgeByName("ef").weight); * * vertex<double> a = new vertex<double>("a"); * vertex<double> b = new vertex<double>("b"); * vertex<double> c = new vertex<double>("c"); * vertex<double> d = new vertex<double>("d"); * vertex<double> e = new vertex<double>("e"); * a.addEdge(b); * a.addEdge(c); * b.addEdge(c); * b.addEdge(d); * d.addEdge(c); * d.addEdge(e); * e.addEdge(c); * Graph<double> graph1 = new Graph<double>(new List<vertex<double>> { a, b, c, d, e }); * vertex<double> f = new vertex<double>("f"); * graph1.addVertix(f); * graph1.addEdge(e, f); * Console.WriteLine(graph1.getVertex(a).Name); * graph1.move(e); * Console.WriteLine(graph1.currentVertex.Name); * graph1.removeEdge(c, d); * Console.Read(); */ vertex <double> a = new vertex <double>("a"); vertex <double> b = new vertex <double>("b"); a.addEdge(b); Console.WriteLine(a.getEdge(b).weight.ToString()); edge <double> DtoS = new edge <double>(a, b); Console.WriteLine(DtoS.destinationVertex.Name); Console.WriteLine(DtoS.sourceVertex.Name); Console.WriteLine(DtoS.weight.ToString()); Console.Read(); }
public void addVertix(vertex <T> vertex) {//ad a vertex to the list of verticies of the graph _vertex.Add(vertex); }
public vertex <T> getVertex(vertex <T> vertex) {//return a vertex in the graph return((vertex <T>)_vertex.Where(e => e == vertex).ToList().ElementAt(0)); }
public edge(vertex <T> SourceVertex, vertex <T> DestinationVertex, T weight = default(T)) { _SourceVertex = SourceVertex; _DestinationVertex = DestinationVertex; _weight = weight; }
public void removeEdge(vertex <T> vertex) {//remove an edge connecting the current vertex with another vertex _CurrentVertix.removeEdge(vertex); }
public void removeEdge(vertex <T> sourceVertex, vertex <T> DestinationVertex) {//removes an edge connecting two vertices sourceVertex.removeEdge(DestinationVertex); }
public void addEdge(vertex <T> sourceVertex, vertex <T> DestinationVertex, T weight = default(T)) {//connect two vertices togther throught an edge sourceVertex.addEdge(DestinationVertex, weight); }
public void removeVertex(vertex <T> vertex) {//destroys a vertex _vertex.Remove(vertex); vertex.Destroy(); }
public void addEdge(vertex <T> TargetVertex, T weight = default(T)) {//connects the current vertex to another vertex _CurrentVertix.addEdge(TargetVertex, weight); }
public edge <T> getEdge(vertex <T> TargetVertex) {//returning refrence to the edge where source vertex is the current vertex //anddestination vertex is the vertex passed to this method return((edge <T>)outs.Where(e => e.sourceVertex == this && e.destinationVertex == TargetVertex) .ToList().ElementAt(0)); }
public void move(vertex <T> destination) {//move over the graph _CurrentVertix = destination; }
public Graph(vertex <T> CurrentVertix, bool undirected = false) {//call this constructor if you're planning to add your vertices one by one this._undirected = undirected; _CurrentVertix = CurrentVertix; }
public Graph(List <vertex <T> > vertex, bool undirected = false) {//call this constructor if you want to pass a list of vertices directly this._undirected = undirected; _vertex = vertex; _CurrentVertix = _vertex[0]; }