コード例 #1
0
        //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--;
                }
            }
        }
コード例 #2
0
        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--;
                }
            }
        }