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}); } }
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); }
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(); }