Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<State*> make_adjacency_list (State* cs)
- {
- vector <State*> state_list ; // adjacency list
- int x, y, i, j;
- //determining number of m and c on the boat side
- if (cs->pos)
- {
- x = n-cs->m ;
- y = n-cs->c;
- }
- else
- {
- x = cs->m ;
- y = cs->c ;
- }
- //creating states
- for (i = 0 ; i <= x ; i++)
- {
- for (j = 0 ; j <= y ; j++)
- {
- if ((i+j)&&((i+j)<np)) // number of passengers : 1 to np-1
- {
- // cout << "ij= " << i << j << endl ;
- if (((x-i)>0)&&((n-x+i)>0)&&((x-i>=y-j) && ((n-x+i)>=(n-y+j)))
- ||((x-i==0)&& ((n-x+i)>=(n-y+j)))||((n-x+i==0)&&((x-i>=y-j))))
- //if (number of missionaries is nonzero and maintains condition ,
- //or number of missionaries is 0 on either side and condition
- {
- // cout << "x-i y-j= " << x-i << y-j << endl ;
- //nodes++ ;
- State* ns = new State(cs->m+(int)pow(-1,1-cs->pos)*i, cs->c + (int)pow(-1,1-cs->pos)*j, 1-cs->pos,cs) ;
- state_list.push_back (ns) ;
- // cout << "nm nc= " <<(int)pow(-1,1-cs->pos)*i <<cs->c + pow(-1,1-cs->pos)*j << endl ;
- }
- }
- }
- }
- return state_list ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement