//METODO PARA GENERAR AGENTES ALEATORIOS public void generarAgente(List <Vertice> grafo, int numero, List <Agente> ag, List <int> agAux, List <Arista> listaAristas) { //CREAR VARIABLE RANDOM Random rand = new Random(); for (int i = 0; i < numero; i++) //NUMERO SE MANDO POR PARAMETRO, ES EL NUMERO DE AGENTES QUE QUIERE EL USUARIO { if (agAux.Count >= grafo.Count) //CONDICION PARA QUE SI SOLICITAS MAS AGENTES QUE VERTICES POSIBLES RETORNE { return; //UNICAMENTE DEJA CREAR LOS AGENTES POSIBLES, LOS QUE SOBRAN NO LOS CREA, UNICAMENTE RETORNA } int vRand = rand.Next(0, grafo.Count); //SELECCION VERTICE RANDOM DE 0 AL # MAX DE VERTICES EN MI GRAFO if (!agAux.Contains(vRand)) //SI MI LISTA AUX DE AGENTES NO CONTIENE YA EL VERTICE RANDOM CREADO (LO CREA) { Agente agente = new Agente(grafo[vRand], generarRecorrido(grafo, grafo[vRand], listaAristas, ag), getDistRec(), getContadorVvisit()); ag.Add(agente); //AGREGAR AGENTE A MI LISTA DE AGENTES agAux.Add(vRand); //AGREGAR MI VERTICE RANDOM CREADO A MI LISTA AUXILIAR } else /*SI MI LISTA AUX YA CONTIENE EL VERTICE QUE SE CREO ENTONCES RESTAMOS EL CONT EN EL FOR PARA QUE HAGA OTRO * ESTO HASTA QUE ARROJE UN VERTICE QUE NO ESTE OCUPADO POR UN AGENTE*/ { i--; } } }
public void generarDepredadora(List <Vertice> grafo, int numero, List <Agente> ag, List <int> agAux, List <Arista> listaAristas, List <Agente> presa, int destinoAnterior) { //CREAR VARIABLE RANDOM int j = 0; Random rand = new Random(); for (int i = 0; i < numero; i++) //NUMERO SE MANDO POR PARAMETRO, ES EL NUMERO DE AGENTES QUE QUIERE EL USUARIO { if (agAux.Count >= grafo.Count) //CONDICION PARA QUE SI SOLICITAS MAS AGENTES QUE VERTICES POSIBLES RETORNE { MessageBox.Show("Se crearon menos Depredadoras por que los demas Vertices ya estaban Ocupados"); return; //UNICAMENTE DEJA CREAR LOS AGENTES POSIBLES, LOS QUE SOBRAN NO LOS CREA, UNICAMENTE RETORNA } int vRand = rand.Next(0, grafo.Count); //SELECCION VERTICE RANDOM DE 0 AL # MAX DE VERTICES EN MI GRAFO if (!agAux.Contains(vRand)) //SI MI LISTA AUX DE AGENTES NO CONTIENE YA EL VERTICE RANDOM CREADO (LO CREA) { int presaAux = 999; if (presa.Count > 0) { while (j < presa.Count) { destinoAnterior = 999; presaAux = presa[j].getVert().getNum(); j++; break; } } /*if(presa.Count==0 && destinoAnterior==vRand && ag.Count == grafo.Count-1) * { * MessageBox.Show("Se pintará un Depredador menos para respetar el ORIGEN de la presa"); * break; * }*/ if (presaAux != vRand /*&& destinoAnterior!=vRand*/) { Agente agente = new Agente(grafo[vRand], generarRecorrido(grafo, grafo[vRand], listaAristas, ag), getDistRec(), getContadorVvisit()); ag.Add(agente); //AGREGAR AGENTE A MI LISTA DE AGENTES agAux.Add(vRand); //AGREGAR MI VERTICE RANDOM CREADO A MI LISTA AUXILIAR } else { i--; } } else /*SI MI LISTA AUX YA CONTIENE EL VERTICE QUE SE CREO ENTONCES RESTAMOS EL CONT EN EL FOR PARA QUE HAGA OTRO * ESTO HASTA QUE ARROJE UN VERTICE QUE NO ESTE OCUPADO POR UN AGENTE*/ { i--; } } }