Hola a todos,
Estoy realizando una aplicación de consola en C#, y necesito crear una serie de rutas entre determinados puntos de la siguiente manera:
Las rutas que pretendo encontrar son todas las que existan obtenidas aplicando la heurística del vecino más próximo. Quiero guardar todos los casos para luego trabajar con ellos, las rutas no deben repetir puntos.
Por ejemplo si tengo 4 puntos más el inicial que llamo 0:
Las de solo un punto, que siempre las tendré: 0-1-0, 0-2-0, 0-3-0, 0-4-0.
Las de dos puntos, que también las deberé coger todas: 0-1-2-0, 0-1-3-0, 0-1-4-0, 0-2-3-0, 0-2-4-0, 0-3-4-0.
Y a partir de aquí sí que el orden es importante. En las rutas con tres puntos, necesito en cada caso la más corta:
Para mí no es lo mismo en 1,2,3: 0-1-2-3-0, que 0-3-1-2-0 o 0-2-3-1-0. Y de estas solo necesito la más corta según distancias. Lo mismo con los conjuntos 1,2,4; 1,3,4; 2,3,4.
Luego en este ejemplo de 4 puntos, me quedaría hacer la ruta de menos distancia con 1,2,3,4.
Tengo los datos de los puntos y la distancia entre ellos en una estructura y una matriz respectivamente:
La matriz de distancias es simétrica:
static double[,] Mdist;
Los puntos me los guardo en una struct:
struct tipoPunto
{
public int Y;
public int Z;
public float peso;
}
Y para guardar estas estructuras que deseo crear, había pensado en una estructura donde en el List guardo el orden y la ruta en sí, en l la longitud del recorrido y en t, la del tiempo que lo obtendré a partir de la distancia.
struct InfoRuta
{
public List<int> p;
public float l;
public float t;
public float d;
public float tp;
public float c;
}
Muchas gracias por leer mi pregunta.