Beispiel #1
0
        public override object EXECUTE(params object[] po)
        {
            MiMFa_Matrix <object> lo = new MiMFa_Matrix <object>();

            if (po != null)
            {
                for (int i = 0; i < po.Length; i++)
                {
                    if (po[i] == null)
                    {
                        lo.Add(new MiMFa_List <object>());
                    }
                    else if (po[i] is MiMFa_List <object> )
                    {
                        lo.Add((MiMFa_List <object>)po[i]);
                    }
                    else if (po[i].GetType().Name.EndsWith("[]"))
                    {
                        lo.AddRow((object[])po[i]);
                    }
                    else
                    {
                        lo.AddRow(po[i]);
                    }
                }
            }
            if (_sorted)
            {
                lo.Sort();
            }
            return(lo);
        }
Beispiel #2
0
        public MiMFa_Matrix <double> CrossPasses(dynamic graph)
        {
            int length = graph.Count;
            MiMFa_Matrix <double> path = new MiMFa_Matrix <double>(length, 0);

            for (int k = 0; k < length; k++)
            {
                for (int i = 0; i < length; i++)
                {
                    for (int j = 0; j < length; j++)
                    {
                        if (i == j ||
                            (
                                graph[i][k] < INF.inf &&
                                graph[k][j] < INF.inf) ||
                            (
                                path[i][k] == 1 &&
                                path[k][j] == 1
                            ))
                        {
                            path[i][j] = 1;
                        }
                    }
                }
            }
            return(path);
        }
Beispiel #3
0
        public MiMFa_Matrix <double>[] FloydWarshall(dynamic graph)
        {
            int length = graph.Count;
            MiMFa_Matrix <double> dist = new MiMFa_Matrix <double>(length, 0);
            MiMFa_Matrix <double> path = new MiMFa_Matrix <double>(length, 0);

            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    if (i == j)
                    {
                        path[i][j] = INF.inf;
                        dist[i][j] = 0;
                    }
                    else if (graph[i][j] == 0 ||
                             graph[i][j] >= INF.inf ||
                             graph[i][j] <= -INF.inf)
                    {
                        path[i][j] = INF.inf;
                        dist[i][j] = INF.inf;
                    }
                    else
                    {
                        path[i][j] = i + 1;
                        dist[i][j] = graph[i][j];
                    }
                }
            }
            double n = INF.inf;

            for (int k = 0; k < length; k++)
            {
                for (int i = 0; i < length; i++)
                {
                    for (int j = 0; j < length; j++)
                    {
                        if (i != j &&
                            dist[i][k] < INF.inf &&
                            dist[k][j] < INF.inf &&
                            dist[i][j] < (n = dist[i][k] + dist[k][j]))
                        {
                            dist[i][j] = n;
                            path[i][j] = k + 1;
                        }
                    }
                }
            }
            return(new MiMFa_Matrix <double>[] { dist, path });
        }
Beispiel #4
0
        public virtual String Done <T>(MiMFa_Matrix <T> arg)
        {
            if (arg == null)
            {
                return("");
            }
            string str = "";

            for (int i = 0; i < arg.Count; i++)
            {
                str += Done(arg[i]) + BreakSign;
            }
            if (str.Length > BreakSign.Length)
            {
                return(str.Substring(0, str.Length - BreakSign.Length));
            }
            return("");
        }