コード例 #1
0
        public override void main()
        {
            int              done = 0;
            IStringInstance  input_data_instance  = (IStringInstance)Input_data.Instance;
            IStringInstance  output_data_instance = (IStringInstance)Output_data.Instance;
            IIntegerInstance termination_flag     = (IIntegerInstance)Termination_flag.Instance;

            string setE = input_data_instance.Value;

            string setV = "1 c 0" + System.Environment.NewLine;


            IDictionary <int, int> vertices = new Dictionary <int, int>();

            foreach (string edge in setE.Split(System.Environment.NewLine.ToCharArray()))
            {
                if (edge.Length > 0)
                {
                    int vertex = edge [0];
                    if (!vertices.ContainsKey(vertex))
                    {
                        setV += edge [0] + " d " + int.MaxValue + System.Environment.NewLine;
                        vertices.Add(vertex, vertex);
                    }
                }
            }

            input_data_instance.Value = setV + System.Environment.NewLine + setE;

            int count = 0;

            while (done == 0)
            {
                Console.WriteLine(Rank + ": ITERATION PATH_FLOW.GO ! - " + (++count));

                this.Path_flow.go();

                setV = output_data_instance.Value;
                Trace.WriteLine(Rank + ": --- setV = " + setV);

                done = setV.EndsWith("True") ? 1 : 0;
                termination_flag.Value = done;
                Set_termination_flag.go();

                setV = setV.Remove(setV.IndexOf(done == 1 ? "True" : "False") - 2);

                Trace.WriteLine(Rank + ": --- END ITERATION PATH_FLOW.GO ! - " + count);

                input_data_instance.Value = setV;
            }



            Console.WriteLine(Rank + ": --- FINISH PATH_FLOW.GO !");
        }
コード例 #2
0
        public override void main()
        {
            int             done = 0;
            IStringInstance input_data_instance  = (IStringInstance)Input_data.Instance;
            IStringInstance output_data_instance = (IStringInstance)Output_data.Instance;
            IIteratorInstance <IPathInfo> initial_data_instance = (IIteratorInstance <IPathInfo>)Initial_data.Instance;
            IKVPairInstance <IInteger, IIterator <IPathInfo> > final_distances_instance = (IKVPairInstance <IInteger, IIterator <IPathInfo> >)Final_distances.Instance;
            IIntegerInstance termination_flag = (IIntegerInstance)Termination_flag.Instance;

            string setE = input_data_instance.Value;
            string setV = "1 c 0" + System.Environment.NewLine;
            IDictionary <int, int> vertices = new Dictionary <int, int>();

            foreach (string edge in setE.Split(System.Environment.NewLine.ToCharArray()))
            {
                if (edge.Length > 0)
                {
                    int vertex = edge [0];
                    if (!vertices.ContainsKey(vertex))
                    {
                        setV += edge [0] + " d " + int.MaxValue + System.Environment.NewLine;
                        vertices.Add(vertex, vertex);
                    }
                }
            }

            feedInitialData(setV + System.Environment.NewLine + setE, initial_data_instance);

            int count = 0;

            while (done == 0)
            {
                Console.WriteLine(Rank + ": ITERATION PATH_FLOW FAST GO ! - " + (++count));

                this.Path_flow.go();

                done = ((IIntegerInstance)final_distances_instance.Key).Value;

                termination_flag.Value = done;
                Set_termination_flag.go();

                if (done == 0)
                {
                    Trace.WriteLine(Rank + ": Exchange #1");
                    initial_data_instance.putAll((IIteratorInstance <IPathInfo>)final_distances_instance.Value);
                    initial_data_instance.finish();
                    Trace.WriteLine(Rank + ": Exchange #2");
                }
            }

            outputFinalDistances((IIteratorInstance <IPathInfo>)final_distances_instance.Value, output_data_instance);

            Trace.WriteLine(Rank + ": --- FINISH PATH_FLOW.GO !");
        }