Exemplo n.º 1
0
		public ArrayList getSuccessors(Object state)
		{
			ArrayList list = new ArrayList(20);
			Q2State jstate = (Q2State) state;
        
			//By filling
			for(int i=0; i<3; i++) 
			{
				if (jstate.jugArray[i] < Q2State.capacityArray[i]) 
				{
					Q2State successor_state = new Q2State(jstate);
					successor_state.jugArray[i] = Q2State.capacityArray[i];
					Successor s = new Successor("fill " + i, successor_state);
					list.Add(s);
				}
			}
			//By emptying
			for(int i=0; i<3; i++) 
			{
				if (jstate.jugArray[i] > 0) 
				{
					Q2State successor_state = new Q2State(jstate);
					successor_state.jugArray[i] = 0;
					Successor s = new Successor("empty " + i, successor_state);
					list.Add(s);
				}
			}                   
			//By pouring j to i
			for(int i=0; i<3; i++) 
			{
				for(int j=0; j<3; j++) 
				{
					if (j != i) 
					{
						int newjug_i = min(jstate.jugArray[i] + jstate.jugArray[j], Q2State.capacityArray[i]);
						int juginc_i = newjug_i - jstate.jugArray[i];
						if (juginc_i > 0) 
						{
							Q2State successor_state = new Q2State(jstate);
							successor_state.jugArray[i] += juginc_i;
							successor_state.jugArray[j] -= juginc_i;
							Successor s = new Successor("pouring " + j + " to " + i, successor_state);
							list.Add(s);
						}
					}
				}
			}        
			return list;
		}
Exemplo n.º 2
0
		public ArrayList getSuccessors(Object state)
		{
			ArrayList list = new ArrayList(20);
			JocksNerdsState jocksNerdsState = (JocksNerdsState) state;
        
			int numberNerdsLeft = jocksNerdsState.locationArray[0];
			int numberJocksLeft = jocksNerdsState.locationArray[1];
			int numberNerdsRight = 3 - jocksNerdsState.locationArray[0];
			int numberJocksRight = 3 - jocksNerdsState.locationArray[1];
			int turnCount = jocksNerdsState.locationArray[2];
        
			/*
        
			 if the turn count for the current state is even the boat is on on the left bank,
			 otherwise it's on the right side
			 try moving every combination of nerds and jocks to the opposite bank.
			 Also need to make sure that the # of jocks on one side never outnumbers the
			 number of nerds on that side.
         
			 */
        
			if(jocksNerdsState.locationArray[2] % 2 == 0)
			{
				//the boat's on the left so move people to the right
				JocksNerdsState successor_state;
             
             
             
				//move 1 nerd to the right if the Nerds won't be eaten as a result
				if (numberNerdsLeft > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] -= 1;
					successor_state.locationArray[1] = numberJocksLeft;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 1 nerd right (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
            
				//move 2 Nerds right if the Nerds won't be eaten as a result
				if (numberNerdsLeft > 1)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] -= 2;
					successor_state.locationArray[1] = numberJocksLeft;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 2 Nerds right (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
            
				//move 1 Jock right if the Nerds won't be eaten as a result
				if (numberJocksLeft > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] = numberNerdsLeft;
					successor_state.locationArray[1] -= 1;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 1 Jock right (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
				//move 2 Jocks right if the Nerds won't be eaten as a result
				if (numberJocksLeft > 1)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] = numberNerdsLeft;
					successor_state.locationArray[1] -= 2;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 2 Jocks right (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
				//move a Jock and a nerd right
				if (numberJocksLeft > 0 && numberNerdsLeft > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] -= 1;
					successor_state.locationArray[1] -= 1;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move a nerd and Jock right (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
			}   
			else
			{   
				//the boat is on the right so try moving people to the left
            
				//the boat is on the left so move people to the right
				JocksNerdsState successor_state;
             
             
             
				//move 1 nerd to the left if the Nerds won't be eaten as a result
				if (numberNerdsRight > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] += 1;
					successor_state.locationArray[1] = numberJocksLeft;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 1 nerd left (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
            
				//move 2 Nerds left if the Nerds won't be eaten as a result
				if (numberNerdsRight> 1)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] += 2;
					successor_state.locationArray[1] = numberJocksLeft;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 2 Nerds left (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
            
				//move 1 Jock left if the Nerds won't be eaten as a result
				if (numberJocksRight > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] = numberNerdsLeft;
					successor_state.locationArray[1] += 1;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 1 Jock left (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
				//move 2 Jocks left if the Nerds won't be eaten as a result
				if (numberJocksRight > 1)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] = numberNerdsLeft;
					successor_state.locationArray[1] += 2;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move 2 Jocks left (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
				//move a Jock and a nerd left
				if (numberJocksRight > 0 && numberNerdsRight > 0)
				{
					successor_state = new JocksNerdsState(jocksNerdsState);
					successor_state.locationArray[0] += 1;
					successor_state.locationArray[1] += 1;
					successor_state.locationArray[2] = turnCount + 1;
					if(isValidState(successor_state))
					{
						Successor s = new Successor("move a nerd and Jock left (array = " + successor_state.locationArray[0] + ", " + successor_state.locationArray[1] + ", "  + successor_state.locationArray[2] + ")\n", successor_state);
						list.Add(s);
					}
                 
				}
            
        
			}
        
       
        
			return list;
		}
Exemplo n.º 3
0
		public ArrayList getSuccessors(Object state)
		{
			ArrayList list = new ArrayList(20);
			Q4State jstate = (Q4State) state;
        
			string location = jstate.location;
        
			Successor s;
			Q4State successor_state ;
        
        
			//these functions are used to track the expanded nodes step/heuristic costs
			//Q4StepCostFunction sn = new Q4StepCostFunction();
			//Q4HeuristicFunction hn = new Q4HeuristicFunction();
        
			//System.out.println("Expanding " + location);
         
			if (location.Equals("Oradea"))
			{
				successor_state = new Q4State("Zerind");
				s = new Successor("go to  Zerind", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Sibiu");
				s = new Successor("go to  Sibiu", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Zerind"))
			{
				successor_state = new Q4State("Oradea");
				s = new Successor("go to  Oradea", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Arad");
				s = new Successor("go to Arad", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Arad"))
			{
				successor_state = new Q4State("Zerind");
				s = new Successor("go to Zerind", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Timisoara");
				s = new Successor("go to Timisoara", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Timisoara"))
			{
				successor_state = new Q4State("Arad");
				s = new Successor("go to Arad", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Lugoj");
				s = new Successor("go to  Lugoj", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Lugoj"))
			{
				successor_state = new Q4State("Timisoara");
				s = new Successor("go to Timisoara", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Mehadia");
				s = new Successor("go to Mehadia", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Mehadia"))
			{
				successor_state = new Q4State("Dobreta");
				s = new Successor("go to Dobreta", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Lugoj");
				s = new Successor("go to Lugoj", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Dobreta"))
			{
				successor_state = new Q4State("Mehadia");
				s = new Successor("go to Mehadia", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Craiova");
				s = new Successor("go to Craiova", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Sibiu"))
			{
				successor_state = new Q4State("Arad");
				s = new Successor("go to Arad", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Oradea");
				s = new Successor("go to Oradea", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Fagaras");
				s = new Successor("go to Fagaras", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Rimnicu Vilcea");
				s = new Successor("go to Rimnicu Vilcea", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Rimnicu Vilcea"))
			{
				successor_state = new Q4State("Sibiu");
				s = new Successor("go to Sibiu", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Pitesti");
				s = new Successor("go to Pitesti", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Craiova");
				s = new Successor("go to Craiova", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Craiova"))
			{
				successor_state = new Q4State("Rimnicu Vilcea");
				s = new Successor("go to Rimnicu Vilcea", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Dobreta");
				s = new Successor("go to Dobreta", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Pitesti");
				s = new Successor("go to Pitesti", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Pitesti"))
			{
				successor_state = new Q4State("Rimnicu Vilcea");
				s = new Successor("go to Rimnicu Vilcea", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Craiova");
				s = new Successor("go to Craiova", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Bucharest");
				s = new Successor("go to Bucharest", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Fagaras"))
			{
				successor_state = new Q4State("Sibiu");
				s = new Successor("go to Sibiu", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Bucharest");
				s = new Successor("go to Bucharest", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Bucharest"))
			{
				successor_state = new Q4State("Fagaras");
				s = new Successor("go to Fagaras", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Pitesti");
				s = new Successor("go to Pitesti", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Giurgiu");
				s = new Successor("go to Giurgiu", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Urziceni");
				s = new Successor("go to Urziceni", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Giurgiu"))
			{
				successor_state = new Q4State("Bucharest");
				s = new Successor("go to Bucharest", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Urziceni"))
			{
				successor_state = new Q4State("Bucharest");
				s = new Successor("go to Bucharest", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Vaslui");
				s = new Successor("go to Vaslui", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Hirsova");
				s = new Successor("go to Hirsova", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Vaslui"))
			{
				successor_state = new Q4State("Urziceni");
				s = new Successor("go to Urziceni", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Iasi");
				s = new Successor("go to Iasi", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Iasi"))
			{
				successor_state = new Q4State("Vaslui");
				s = new Successor("go to Vaslui", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Neamt");
				s = new Successor("go to Neamt", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Neamt"))
			{
				successor_state = new Q4State("Iasi");
				s = new Successor("go to Iasi", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Hirsova"))
			{
				successor_state = new Q4State("Urziceni");
				s = new Successor("go to Urziceni", successor_state);
				list.Add(s);
            
				successor_state = new Q4State("Eforie");
				s = new Successor("go to Eforie", successor_state);
				list.Add(s);
			}
			else if (location.Equals("Eforie"))
			{
				successor_state = new Q4State("Hirsova");
				s = new Successor("go to Hirsova", successor_state);
				list.Add(s);
			}
       
               
            
        
			return list;
		}