17 : d_(0), vertex_(NULL), cardinality_(NULL)
40 if (&game ==
this)
return;
57 for(
verti i = 0; i < g.
V(); i++)
78 for (
verti v = 0; v < num_vertices; ++v)
91 for (
verti v = 0; v < V; ++v)
110 new_cardinality[0] = 0;
136 bool preserve_parity )
148 std::vector<int> prio_map(
d_, -1);
149 int first_prio = 0, last_prio = 0;
150 if (!preserve_parity)
154 assert(first_prio <
d_);
156 int swap_players = first_prio%2;
157 prio_map[first_prio] = last_prio;
158 for (
int p = first_prio + 1; p <
d_; ++p)
161 if ((last_prio ^ p)%2 != swap_players) ++last_prio;
162 prio_map[p] = last_prio;
166 int new_d = last_prio + 1;
168 std::fill(new_cardinality, new_cardinality + new_d, 0);
169 for (
int p = 0; p <
d_; ++p)
171 if (prio_map[p] >= 0)
195 for ( ; it != end; ++it)
199 if (r >= p)
return 0;
216 std::deque<verti> todo;
235 while (!todo.empty())
237 verti w = todo.front();
296void ParityGame::make_subgame_threads(
const ParityGame &game,
302 assert(
this != &game);
306 for (
verti v = 0; v < nvert; ++v)
std::size_t verti
type used to number vertices
player_t opponent(const player_t p)
priority_t priority(verti v) const
verti cardinality(int p) const
Player player(verti v) const
void swap(ParityGame &pg)
void reset(verti V, int d)
long long propagate_priorities()
void assign(const ParityGame &game)
void shuffle(const std::vector< verti > &perm)
void recalculate_cardinalities(verti num_vertices)
int propagate_priority(verti v, StaticGraph::const_iterator it, StaticGraph::const_iterator end)
void compress_priorities(const verti cardinality[]=0, bool preserve_parity=true)
ParityGameVertex * vertex_
void make_random(verti V, unsigned clustersize, unsigned outdeg, StaticGraph::EdgeDirection edge_dir, int d)
const_iterator succ_end(verti v) const
void make_random_clustered(verti cluster_size, verti V, unsigned outdeg, EdgeDirection edge_dir)
const_iterator succ_begin(verti v) const
void make_subgraph_threads(const StaticGraph &graph, const verti *verts, const verti nvert, bool proper, EdgeDirection edge_dir=EDGE_NONE)
void assign(const StaticGraph &graph)
const_iterator pred_begin(verti v) const
const_iterator pred_end(verti v) const
const verti * const_iterator
void swap(atermpp::unprotected_aterm_core &t1, atermpp::unprotected_aterm_core &t2) noexcept
Swaps two aterms.
player_t player
the vertex owner (i.e. next player to move)
priority_t priority
the priority of the vertex between 0 and d (exclusive).