static void Main(string[] args) { Console.WriteLine("Algorytm przetwarza plik z danymi domyslnie: input.txt"); Console.WriteLine("Algorytm sprawdza czy droga o zadanej dlugosci w podanym grafie jest mozliwa."); Console.WriteLine("Drogi krotsze lub dluzsze sa odrzucane"); Console.WriteLine("Drogi zawierajace cykla sa dozwolone np dozwolone jest: A->B->C-A->B->C ->..."); Console.WriteLine("Algorytm zaklada ze przejad powrotny po podanym odcinku jest niadozwolony"); Console.WriteLine("np: zakazane jest A->B->A lub A->B->C->D->B->A"); Console.WriteLine(); Console.WriteLine("Podaj nazwe pliku z danymi np : input.txt"); Console.WriteLine("Struktura pliku wiersz pierwszy try liczby int V,E,S ilosc przystankow, ilosc drog, wymagana roga"); Console.WriteLine("V - ilosc przystankow"); Console.WriteLine("E - ilosc drog"); Console.WriteLine("S - dlugosc wymaganej drogi"); Console.WriteLine("E wierszy nastepnych A B D"); Console.WriteLine("A przystanek Z"); Console.WriteLine("B przystanek DO"); Console.WriteLine("D dlugosc odcinka z A do B"); var pathFinding = new Pathfinding(); var filename = @"input.txt"; if (args.Count() == 1) filename = args[0]; if (!File.Exists(filename)) { return; } InitGraph(pathFinding, filename); var stopwatch=Stopwatch.StartNew(); bool success=false; for (var i = 1; i < vertexCount; i++) { if (pathFinding.MyDepthFirstSearch(pathFinding.Graph.Nodes[i], lenght)) { success = true; break; } Console.WriteLine("new vertex"); Console.WriteLine("Run time:" + stopwatch.ElapsedMilliseconds); } if(success) Console.WriteLine("Success!!!"); else Console.WriteLine("Failure!!!"); Console.WriteLine(); Console.WriteLine("Run time:"+stopwatch.ElapsedMilliseconds); Console.ReadKey(); }
private static void InitGraph(Pathfinding pathFinding,string filename) { using (var streamReader = File.OpenText(filename)) { var graphDefinition = (from s in streamReader.ReadLine().Split(' ') select int.Parse(s)).ToArray(); vertexCount = graphDefinition[0]; edgeCount = graphDefinition[1]; lenght = graphDefinition[2]; //adding Vertexes for (var i = 1; i <= vertexCount; i++) pathFinding.Graph.AddNode(i, null); //adding Edges int[] trackData; for (var i = 0; i < edgeCount; i++) { trackData = (from s in streamReader.ReadLine().Split(' ') select int.Parse(s)).ToArray(); pathFinding.Graph.AddUndirectedEdge(trackData[0], trackData[1], trackData[2]); } } }
static void Main(string[] args) { var pathFinding = new Pathfinding(); Node start, end; // Vertexes pathFinding.Graph.AddNode("Arad", null); pathFinding.Graph.AddNode("Bucharest", null); pathFinding.Graph.AddNode("Craiova", null); pathFinding.Graph.AddNode("Dobreta", null); pathFinding.Graph.AddNode("Eforie", null); pathFinding.Graph.AddNode("Fagaras", null); pathFinding.Graph.AddNode("Giurgiu", null); pathFinding.Graph.AddNode("Hirsova", null); pathFinding.Graph.AddNode("Iasi", null); pathFinding.Graph.AddNode("Lugoj", null); pathFinding.Graph.AddNode("Mehadia", null); pathFinding.Graph.AddNode("Neamt", null); pathFinding.Graph.AddNode("Oradea", null); pathFinding.Graph.AddNode("Pitesti", null); pathFinding.Graph.AddNode("Rimnicu Vilcea", null); pathFinding.Graph.AddNode("Sibiu", null); pathFinding.Graph.AddNode("Timisoara", null); pathFinding.Graph.AddNode("Urziceni", null); pathFinding.Graph.AddNode("Vaslui", null); pathFinding.Graph.AddNode("Zerind", null); // Edges // Arad <-> Zerind pathFinding.Graph.AddUndirectedEdge("Arad", "Zerind", 75); // Arad <-> Timisoara pathFinding.Graph.AddUndirectedEdge("Arad", "Timisoara", 118); // Arad <-> Sibiu pathFinding.Graph.AddUndirectedEdge("Arad", "Sibiu", 140); // Bucharest <-> Urziceni pathFinding.Graph.AddUndirectedEdge("Bucharest", "Urziceni", 85); // Bucharest <-> Giurgiu pathFinding.Graph.AddUndirectedEdge("Bucharest", "Giurgiu", 90); // Bucharest <-> Pitesti pathFinding.Graph.AddUndirectedEdge("Bucharest", "Pitesti", 101); // Bucharest <-> Fagaras pathFinding.Graph.AddUndirectedEdge("Bucharest", "Fagaras", 211); // Craiova <-> Dobreta pathFinding.Graph.AddUndirectedEdge("Craiova", "Dobreta", 120); // Craiova <-> Pitesti pathFinding.Graph.AddUndirectedEdge("Craiova", "Pitesti", 138); // Craiova <-> Rimnicu Vilcea pathFinding.Graph.AddUndirectedEdge("Craiova", "Rimnicu Vilcea", 146); // Dobreta <-> Mehadia pathFinding.Graph.AddUndirectedEdge("Dobreta", "Mehadia", 75); // Eforie <-> Hirsova pathFinding.Graph.AddUndirectedEdge("Eforie", "Hirsova", 86); // Fagaras <-> Sibiu pathFinding.Graph.AddUndirectedEdge("Fagaras", "Sibiu", 99); // Hirsova <-> Urziceni pathFinding.Graph.AddUndirectedEdge("Hirsova", "Urziceni", 98); // Iasi <-> Neamt pathFinding.Graph.AddUndirectedEdge("Iasi", "Neamt", 87); // Iasi <-> Vaslui pathFinding.Graph.AddUndirectedEdge("Iasi", "Vaslui", 92); // Lugoj <-> Mehadia pathFinding.Graph.AddUndirectedEdge("Lugoj", "Mehadia", 70); // Lugoj <-> Timisoara pathFinding.Graph.AddUndirectedEdge("Lugoj", "Timisoara", 111); // Oradea <-> Zerind pathFinding.Graph.AddUndirectedEdge("Oradea", "Zerind", 71); // Oradea <-> Sibiu pathFinding.Graph.AddUndirectedEdge("Oradea", "Sibiu", 151); // Pitesti <-> Rimnicu Vilcea pathFinding.Graph.AddUndirectedEdge("Pitesti", "Rimnicu Vilcea", 97); // Rimnicu Vilcea <-> Sibiu pathFinding.Graph.AddUndirectedEdge("Rimnicu Vilcea", "Sibiu", 80); // Urziceni <-> Vaslui pathFinding.Graph.AddUndirectedEdge("Urziceni", "Vaslui", 142); start = pathFinding.Graph.Nodes["Oradea"]; end = pathFinding.Graph.Nodes["Neamt"]; Console.WriteLine("\nBreadth First Search algorithm"); Pathfinding.BreadthFirstSearch(start, end); foreach(var n in pathFinding.Graph.Nodes) n.Value.Data = null; Console.WriteLine("\n\nDepth First Search algorithm"); Pathfinding.DepthFirstSearch(start, end); Console.WriteLine("\n\nShortest path"); Pathfinding.ShortestPath(start, end); pathFinding.Graph.Clear(); Console.ReadKey(); }
static void Main(string[] args) { Console.WriteLine("Algorytm przetwarza plik z danymi domyslnie: input.txt"); Console.WriteLine("Algorytm sprawdza czy droga o zadanej dlugosci w podanym grafie jest mozliwa."); Console.WriteLine("Drogi krotsze lub dluzsze sa odrzucane"); Console.WriteLine("Drogi zawierajace cykla sa dozwolone np dozwolone jest: A->B->C-A->B->C ->..."); Console.WriteLine("Algorytm zaklada ze przejad powrotny po podanym odcinku jest niadozwolony"); Console.WriteLine("np: zakazane jest A->B->A lub A->B->C->D->B->A"); Console.WriteLine(); Console.WriteLine("Podaj nazwe pliku z danymi np : input.txt"); Console.WriteLine("Struktura pliku wiersz pierwszy try liczby int V,E,S ilosc przystankow, ilosc drog, wymagana roga"); Console.WriteLine("V - ilosc przystankow"); Console.WriteLine("E - ilosc drog"); Console.WriteLine("S - dlugosc wymaganej drogi"); Console.WriteLine("E wierszy nastepnych A B D"); Console.WriteLine("A przystanek Z"); Console.WriteLine("B przystanek DO"); Console.WriteLine("D dlugosc odcinka z A do B"); var pathFinding = new Pathfinding(); var filename = @"input.txt"; if (args.Count() == 1) { filename = args[0]; } if (!File.Exists(filename)) { return; } InitGraph(pathFinding, filename); var stopwatch = Stopwatch.StartNew(); bool success = false; for (var i = 1; i < vertexCount; i++) { if (pathFinding.MyDepthFirstSearch(pathFinding.Graph.Nodes[i], lenght)) { success = true; break; } Console.WriteLine("new vertex"); Console.WriteLine("Run time:" + stopwatch.ElapsedMilliseconds); } if (success) { Console.WriteLine("Success!!!"); } else { Console.WriteLine("Failure!!!"); } Console.WriteLine(); Console.WriteLine("Run time:" + stopwatch.ElapsedMilliseconds); Console.ReadKey(); }