Example #1
0
        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();
        }
Example #2
0
        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]);
                }
            }
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }