public static ParityGame ParseDirect(string PGfile) { var sr = new StreamReader(PGfile); var ret = new ParityGame(); string firstline = sr.ReadLine(); int numNodes = 1 + int.Parse(firstline.Split(' ')[1].TrimEnd(';')); ret.V = new Vertex[numNodes]; //ret.E = new List<Edge>(); while (!sr.EndOfStream) { string line = sr.ReadLine(); string[] tokens = line.TrimEnd(';').Split(' '); Vertex v = ret.GetV(int.Parse(tokens[0])); v.Priority = int.Parse(tokens[1]); v.OwnerEven = tokens[2] == "0"; foreach (var succ in tokens[3].Split(',')) { var w = ret.GetV(int.Parse(succ)); //ret.E.Add(new Edge(v, w)); v.Adj.Add(w); w.Inc.Add(v); } if (tokens.Length >= 5) v.Name = tokens[4].Trim('"'); } return ret; }
public static List<List<Vertex>> DetectCycles(ParityGame g) { _stronglyConnectedComponents = new List<List<Vertex>>(); foreach (var v in g.V) v.index = -1; index = 0; S = new Stack<Vertex>(); dg = g; foreach (Vertex v in g.V) { if (v.index < 0) { StrongConnect(v); } } return _stronglyConnectedComponents; }
public Jurdzinsky(ParityGame pg) { this.pg = pg; // determine maximum values for dtuple d = pg.V.Max(m => m.Priority) + 1; // d = max{ p(v) | v in V} + 1. MMaxEven = new DTuple(d); for (int i = 1; i < d; i += 2) MMaxEven[i] = pg.V.Count(v => v.Priority == i); //MMaxOdd = new DTuple(d); //for (int i = 0; i < d; i += 2) // MMaxOdd[i] = pg.V.Count(v => v.Priority == i); MTop = new DTuple(d); for (int i = 0; i < d; i++) MTop[i] = int.MaxValue; }
public static List<List<Vertex>> DetectCycles(ParityGame g) { _sccs.Clear(); _tarStack.Clear(); _onStack.Clear(); foreach (var v in g.V) v.index = -1; int index = 0; foreach (var v in g.V) _onStack[v] = false; for (int n = 0; n < g.V.Length; n++) { if (g.V[n].index == -1) { tarjan_iter(g.V[n], ref index); } } return _sccs; }