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); }
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); }
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 }); }
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(""); }