Пример #1
0
        public static Grafos Corte(Grafos ArvoreMinima, int k)
        {
            List <celula> Arestas = new List <celula>();

            for (int x = 0; x < ArvoreMinima.GetVertices; x++)
            {
                for (int y = 0; y < ArvoreMinima.Get_N_arestas(x); y++)
                {
                    Arestas.Add(ArvoreMinima.GetAresta(x, y));
                }
            }
            List <celula> listaOrdenada = Arestas.OrderByDescending(c => c.Getpeso).ToList();

            //deletar k arestas de maior peso
            //fazer função imprime componentes
            // k-1 pois a quantidade de cortes deve ser igual a quantidade de professores menos 1 para se formar quantidades iguais de grupos
            // ex se for 2 prof serao 1 corte
            for (int x = 0; x < (k - 1) * 2; x++) //k*2 por conta da necessidade de deletar a aresta nas 2 direções
            {
                ArvoreMinima.DeletarArestar(listaOrdenada[x].GetOrigem, listaOrdenada[x].GetDestino, listaOrdenada[x].Getpeso);
            }

            Console.WriteLine("\nArvore Minima com K: " + (k - 1) + " Cortes");
            ArvoreMinima.ImprimeGrafo_Completo();
            Console.WriteLine();
            return(ArvoreMinima);
        }
Пример #2
0
        public static Grafos IniciaGrafo(int Tamanho)
        {
            List <celula>[] Lista        = new List <celula> [Tamanho];
            List <celula>[] Complementar = new List <celula> [Tamanho]; // grafo complementar ao grafo
            for (int x = 0; x < Tamanho; x++)
            /*  inicializa os V elementos do vetor  */
            {
                Lista[x] = new List <celula>();
            }
            // ------------------------------------------------
            Grafos demo = new Grafos(Tamanho, Lista);

            return(demo);
        }
Пример #3
0
        public static Grafos IniciaComplementar(int Tamanho)
        {
            int txt = Tamanho;

            List <celula>[] Complementar = new List <celula> [txt]; // grafo complementar ao grafo 1
                                                                    // ------------------------------------------------
            for (int x = 0; x < txt; x++)
            /*  inicializa os V elementos do vetor  */

            {
                Complementar[x] = new List <celula>();
            }
            Grafos Grafo2 = new Grafos(Tamanho, Complementar);

            return(Grafo2);
        }
Пример #4
0
        public static void Inicia(List <aluno> Alunos, List <List <int> > Matriz, List <Tema> Temas)
        {
            Console.WriteLine("Digite o numero de professores disponiveis");

            // K precisa ser maior que o numero de alunos
            int K = int.Parse(Console.ReadLine());

            while (K > Alunos.Count())
            {
                Console.WriteLine("Numero Invalido, Digite um numero valido.");
                K = int.Parse(Console.ReadLine());
            }
            //Console.WriteLine("Digite a taxa de dissimilaridade maxima");
            //int Dissimilaridade = int.Parse(Console.ReadLine());
            //int razao = Dissimilaridade / K;
            // - - -

            Grafos demo = IniciaGrafo(Temas.Count());


            //
            // temas/profesores = media de temas por professores ou razao
            for (int x = 0; x < Matriz.Count(); x++)
            {
                for (int y = x + 1; y < Matriz.Count(); y++) // y = x+1 para ler apenas a diagonal de cima da matriz
                {
                    demo.AdicinarAresta(x, y, Matriz[x][y]);
                    //if (Matriz[x][y] < Dissimilaridade)
                    //{
                    //    // se a dissimilaridade entre 2 temas for menos ou igual a um valor pre determinado
                    //    // adiciona uma aresta entre os temas
                    //    demo.AdicinarAresta(x, y, Matriz[x][y]);
                    //}
                }
            }

            Console.WriteLine("\nGrafo Original");
            demo.ImprimeGrafo_Completo();

            Grafos ArvoreMinima = new Grafos(Temas.Count(), demo.Kruskul());

            Console.WriteLine("\nArvore Minima");
            ArvoreMinima.ImprimeGrafo_Completo();

            ArvoreMinima = Corte(ArvoreMinima, K);
            // alunos
            // Cod do aluno / cod tema
            // temas
            // cod do tema / nome

            List <List <int> > Grupos_De_Orientacao = new List <List <int> >();

            Grupos_De_Orientacao = ArvoreMinima.Get_Componentes_conexos(Grupos_De_Orientacao);
            ArvoreMinima.Imprime_Componentes_Conexos(Temas, Alunos);

            // Imprime Matriz
            ImprimeMatriz(Matriz);
            //Imprime_Grupo(Grupos_De_Orientacao, Temas, Alunos);
            Console.WriteLine("\nDigite qualquer tecla para voltar ao menu");
            Console.ReadKey();
            Console.Clear();
            Opcao();
        }