コード例 #1
0
        public static void MakePair(ref Grafos gr, int a, int b, Double val)
        {
            if (gr.nodes.Select(x => x).Where(x => x.id == a).Count() == 0)
            {
                gr.nodes.Add(new Node()
                {
                    id = a, value = 0, pathValue = 0
                });
            }
            if (gr.nodes.Select(x => x).Where(x => x.id == b).Count() == 0)
            {
                gr.nodes.Add(new Node()
                {
                    id = b, value = 0, pathValue = 0
                });
            }

            if (a == b)
            {
                foreach (Node nd in gr.nodes)
                {
                    if (nd.id == a)
                    {
                        nd.value = val;
                    }
                }
            }
            else
            {
                foreach (Node nd in gr.nodes)
                {
                    if (nd.id == a)
                    {
                        if (!nd.near.ContainsKey(b))
                        {
                            nd.near.Add(b, val);
                        }
                        else if (nd.near[b] < val)
                        {
                            nd.near[b] = val;
                        }
                    }
                    else if (nd.id == b)
                    {
                        if (!nd.near.ContainsKey(a))
                        {
                            nd.near.Add(a, val);
                        }
                        else if (nd.near[a] < val)
                        {
                            nd.near[a] = val;
                        }
                    }
                }
                //Arestas.Add(new Aresta() { A = a, B = b, val = val});
            }
        }
コード例 #2
0
        public static int MontaGrafo(ref Grafos gr, string path)
        {
            //Declaro o StreamReader para o caminho onde se encontra o arquivo
            StreamReader rd = new StreamReader(@"" + path);
            //Declaro uma string que será utilizada para receber a linha completa do arquivo
            string linha = null;

            //Declaro um array do tipo string que será utilizado para adicionar o conteudo da linha separado
            string[] linhaseparada = null;
            //realizo o while para ler o conteudo da linha
            int arestas = 0, linhas = 0;

            while ((linha = rd.ReadLine()) != null)
            {
                arestas++;
                linhas++;
                try
                {
                    //com o split adiciono a string 'quebrada' dentro do array
                    linhaseparada = linha.Split(' ');
                    //aqui incluo o método necessário para continuar o trabalho
                    int    a, b;
                    Double val;
                    a = Convert.ToInt32(linhaseparada[0]);
                    b = Convert.ToInt32(linhaseparada[1]);
                    //Console.WriteLine(linhaseparada[2]);
                    if (linhaseparada[2].Length > 12)
                    {
                        string x = linhaseparada[2].Substring(0, 6);
                        string y = linhaseparada[2].Substring(linhaseparada[2].Length - 5);
                        linhaseparada[2] = x + y;
                    }
                    //Console.WriteLine(linhaseparada[2]);
                    val = Convert.ToDouble(Double.Parse(linhaseparada[2], System.Globalization.NumberStyles.Any));
                    //Console.WriteLine(val);
                    MakePair(ref gr, a, b, val);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Linha " + linhas + " não lida. " + ex.InnerException + ex.Message);
                }
            }
            rd.Close();
            return(arestas);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: HeitorTomaz/Caminho-Maximo
        static void Main(string[] args)
        {
            BLL prog = new BLL();

            Console.WriteLine("Tá saindo da Jaula o MONSTRO!");

            Grafos gr = new Grafos();


            List <string> csvs = Util.BuscaGrafos();

            foreach (string x in csvs)
            {
                Stopwatch sw = new Stopwatch();

                gr = new Grafos();
                Console.WriteLine("Iniciando " + x);
                int arestas = Util.MontaGrafo(ref gr, x);
                Console.WriteLine();

                int vertices = gr.nodes.Count;
                Console.WriteLine(vertices + " Vértices");
                Console.WriteLine(arestas + " Arestas");


                Console.WriteLine("Início da limpeza: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                sw.Start();
                int limpou = gr.Clean();
                sw.Stop();
                TimeSpan tempo = sw.Elapsed;
                Console.WriteLine("Fim da limpeza: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                Console.WriteLine("Início da execução Heurística: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                sw.Start();
                Console.WriteLine("Caminho máximo: " + x + " = " + prog.LongestCableIncerto(gr));
                sw.Stop();
                Console.WriteLine("Fim da execução: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                TimeSpan tempo2 = sw.Elapsed;
                Console.WriteLine("Tempo de execução Limpeza: " + tempo.ToString());
                Console.WriteLine("Tempo de execução: " + tempo2.ToString());
                Console.WriteLine();

                sw = new Stopwatch();
                gr = new Grafos();
                Console.WriteLine("Iniciando " + x);
                arestas = Util.MontaGrafo(ref gr, x);
                Console.WriteLine();


                Console.WriteLine("Início da limpeza: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                sw.Start();
                limpou = gr.Clean();
                sw.Stop();
                tempo = sw.Elapsed;

                //Console.WriteLine("Limpados: " + limpou + "\nSobraram: " + (vertices - limpou));
                //Console.WriteLine("Caminhos: " + gr.QuantosCaminhos());
                Console.WriteLine("Fim da limpeza: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                sw.Start();

                Console.WriteLine("Caminho máximo: " + x + " = " + prog.LongestCable(gr));
                sw.Stop();

                Console.WriteLine("Fim da execução: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                tempo2 = sw.Elapsed;
                Console.WriteLine("Tempo de execução Limpeza: " + tempo.ToString());
                Console.WriteLine("Tempo de execução Total: " + tempo2.ToString());

                Console.WriteLine();
            }

            //gr.Clean();
            //Console.WriteLine("Maximum length of cable = " + prog.LongestCable(gr));
            Console.WriteLine("ACABOUUU!!!");
            Console.ReadKey();
        }