예제 #1
0
		public Grafo(Vertice[] Vertices, Arista[] Aristas, bool EstaEstructurado = false)
		{
			mVertices = Vertices;
			mAristas = Aristas;

			if (EstaEstructurado) {
				foreach (Vertice Vertice in mVertices) {
					foreach (Arista Arista in mAristas) {
						if (Vertice.AristaValida[Arista] && !Vertice.Aristas.Contains(Arista)) {
							Vertice.AñadirArista(Arista);
						}
					}
				}
			}
		}
예제 #2
0
		public static Recorrido Concatenar(Recorrido R1, Recorrido R2)
		{
			Vertice[] Retorno = new Vertice[R1.Longitud + R2.Longitud - 1];

			if (R1.Grafo == R2.Grafo) {
				for (int i = 0; i <= Retorno.GetUpperBound(0); i++) {
					if (i <= R1.Vertices.GetUpperBound(0)) {
						Retorno[i] = R1.Vertices[i];
					} else {
						Retorno[i] = R2.Vertices[i - R1.Vertices.GetUpperBound(0)];
					}
				}

				return new Recorrido(R1.Grafo, Retorno);
			} else {
				throw new ExcepcionDiscreta("RECORRIDO(CONCATENAR): No se pueden concatenar dos recorridos de grafos diferentes");
			}
		}
예제 #3
0
		public Grafo(long NumeroVertices, params Arista[] Aristas)
		{
			if (NumeroVertices > 0) {
				mNumeroVertices = NumeroVertices;
				mAristas = Aristas;
				mVertices = new Vertice[mNumeroVertices];

				for (int i = 0; i <= mNumeroVertices - 1; i++) {
					mVertices[i] = new Vertice(i);
					foreach (Arista Arista in mAristas) {
						if (mVertices[i].AristaValida[Arista]) {
							mVertices[i].AñadirArista(Arista);
						}
					}
				}
			} else {
				throw new ExcepcionDiscreta("GRAFO (NEW): Un grafo debe tener a menos un vertice" + Constants.vbNewLine + "NumeroVertices=" + NumeroVertices.ToString());
			}
		}