コード例 #1
0
ファイル: Program.cs プロジェクト: RomainDAV/ADSA_TD6
        static void Main(string[] args)
        {
            //Reading the sourceFile and getting stations and links between them
            init();

            //Building a graph from it, the graph architecture is a list of neighbours
            Graph g = new Graph(stations.Count());
            foreach (var c in chemins)
            {
                g.AddEdge(c.Item3-1, c.Item4-1, c.Item5);
            }

            #region q1
            Console.WriteLine("Question 1");
            Console.WriteLine("Choisisez un point de départ ?");
            int a = int.Parse(Console.ReadLine())-1;
            Console.WriteLine("Choisisez un point d'arrivée ?");
            int b = int.Parse(Console.ReadLine())-1;
            Tuple<bool,double[],int[]>temp = g.bellmanFord(a);

            int i = b;
            string reponse = "";
            reponse += temp.Item2[i] + "s " + (i+1) + "<-";
            while (temp.Item3[i] != a)
            {
                i = temp.Item3[i];
                reponse += (i + 1) + "<-";
            }

            reponse += temp.Item3[i]+1;

            Console.WriteLine(reponse);
            #endregion

            Console.WriteLine("Appuyez sur entrée pour passer à la question suivante");
            Console.ReadKey();

            #region q2
            Console.WriteLine("Question 2\nIndiquez votre préférence :\n1=piste verte\n2=piste bleue\n3=piste rouge\n4=piste noire\n5=piste kl\n6=piste surf");
            int choix = int.Parse(Console.ReadLine());
            initAvecChoix(choix);

            Graph g2 = new Graph(stations.Count());
            foreach (var c in chemins)
            {
                g2.AddEdge(c.Item3 - 1, c.Item4 - 1, c.Item5);
            }
            Console.WriteLine("Choisisez un point de départ ?");
            int a2 = int.Parse(Console.ReadLine()) - 1;
            Console.WriteLine("Choisisez un point d'arrivée ?");
            int b2 = int.Parse(Console.ReadLine()) - 1;
            Tuple<bool, double[], int[]> temp2 = g2.bellmanFord(a2);

            int i2 = b2;
            string reponse2 = "";
            reponse2 += temp2.Item2[i2] + "s " + (i2 + 1) + "<-";
            while (temp2.Item3[i2] != a2)
            {
                i2 = temp2.Item3[i2];
                reponse2 += (i2 + 1) + "<-";
            }

            reponse2 += temp2.Item3[i2] + 1;

            Console.WriteLine(reponse2);
            #endregion

            Console.WriteLine("Appuyez sur entrée pour passer à la question suivante");
            Console.ReadKey();

            #region q3
            initFlow();

            Graph g3 = new Graph(stations.Count()+2);
            //on créé la source unique relié arbitrairement aux points 1,2 et 30
            g3.AddEdge(0, 1, int.MaxValue);
            g3.AddEdge(0, 2, int.MaxValue);
            g3.AddEdge(0, 30, int.MaxValue);

            foreach (var c in chemins)
            {
                g3.AddEdge(c.Item3 - 1, c.Item4 - 1, c.Item5);
            }

            //... et le puit unique relié arbitrairement aux points 6 et 29
            g3.AddEdge(6, g3.NbVertices-1, int.MaxValue);
            g3.AddEdge(29, g3.NbVertices - 1, int.MaxValue);

            Console.WriteLine("Question 3:\nOn a considéré arbitrairement 1,2 et 30 comme sources et 6 et 29 comme puits, ils ont été reliés à la source unique et au puit unique");
            Console.WriteLine("Le flow maximum est {0}", g3.GetMaxFlow(0, g3.NbVertices-1));
            #endregion

            Console.ReadKey();
        }