static Grafo_Dir MontagemGrafoDir(string arqName)
        {
            Grafo_Dir grafo;

            StreamReader       reader    = new StreamReader(arqName);
            int                nVertices = int.Parse(reader.ReadLine());
            List <ParOrdenado> lista     = new List <ParOrdenado>();

            while (!reader.EndOfStream)
            {
                int      x, y, peso, direcao;
                string   linha    = reader.ReadLine();
                string[] vetSplit = linha.Split(';');
                x       = int.Parse(vetSplit[0]) - 1;
                y       = int.Parse(vetSplit[1]) - 1;
                peso    = int.Parse(vetSplit[2]);
                direcao = int.Parse(vetSplit[3]);
                if (direcao == -1)
                {
                    int aux = x;
                    x = y;
                    y = aux;
                }
                ParOrdenado par = new ParOrdenado(x, y, peso);
                lista.Add(par);
            }

            reader.Close();

            return(grafo = new Grafo_Dir(nVertices, lista));
        }
        public override Grafo getComplementar()
        {
            Grafo_Und          grafo;
            int                nVertices;
            List <ParOrdenado> pares = new List <ParOrdenado>();

            for (int i = 0; i < Vertices.Length; i++)
            {
                for (int j = 0; j < Vertices.Length; j++)
                {
                    if (i != j)
                    {
                        if (!isAdjacente(Vertices[i], Vertices[j]))
                        {
                            if (!VerificarParExistente(Vertices[i].ID, Vertices[j].ID, pares))
                            {
                                ParOrdenado par = new ParOrdenado(Vertices[i].ID, Vertices[j].ID);
                                pares.Add(par);
                            }
                        }
                    }
                }
            }

            nVertices = Vertices.Length;
            return(grafo = new Grafo_Und(nVertices, pares));
        }
        static Grafo_Und MontagemGrafoUnd(string arqName)
        {
            Grafo_Und          grafo;
            StreamReader       reader    = new StreamReader(arqName);
            int                nVertices = int.Parse(reader.ReadLine());
            List <ParOrdenado> lista     = new List <ParOrdenado>();

            while (!reader.EndOfStream)
            {
                int      x, y, peso;
                string   linha    = reader.ReadLine();
                string[] vetSplit = linha.Split(';');
                x    = int.Parse(vetSplit[0]) - 1;
                y    = int.Parse(vetSplit[1]) - 1;
                peso = int.Parse(vetSplit[2]);
                ParOrdenado par = new ParOrdenado(x, y, peso);
                lista.Add(par);
            }

            reader.Close();

            return(grafo = new Grafo_Und(nVertices, lista));
        }