Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 0 - 3 Missionários lado esquerdo
- // 1 - 3 Canibais do lado esquerdo
- // 2 - 0 Missionários do lado direito
- // 3 - 0 Canibais lado direito
- // 4 - Lado da canoa 0 - Esq - 1 Dir
- let initial_state = [3, 3, 0, 0, 0];
- let final_state = [0, 0, 3, 3, 1];
- // (1,0) - Atravessar 1 missionário
- // (2,0) - Atravessar 2 missionários
- // (1,1) - Atravessar 1 canibal e 1 missionário
- // (0,2) - Atravessar 2 canibais
- // (0,1) - Atravessar 1 canibal
- let possibilities = [
- [1, 0],
- [1, 1],
- [2, 0],
- [0, 2],
- ];
- let visited_nodes = [];
- // Deslocate boat
- const moveBoat = (state, qtdMissionaries, qtdCannibals) => {
- if (qtdCannibals + qtdMissionaries > 2) {
- console.log("Não é possível atravessar mais do que 2 pessoas");
- return false;
- }
- console.log(qtdCannibals, qtdMissionaries);
- if (state[4] == 0) {
- missionariesOrigin = 0;
- cannibalsOrigin = 1;
- missionariesDest = 2;
- cannibalsDest = 3;
- } else {
- missionariesOrigin = 2;
- cannibalsOrigin = 3;
- missionariesDest = 0;
- cannibalsDest = 1;
- }
- if (state[missionariesOrigin] == 0 && state[cannibalsOrigin] == 0) {
- console.log("Não é possível atravessar nenhum missionário");
- return;
- }
- //Se for 0 passa a ser 1 e se for 1 passa a ser 0
- state[4] = 1 - state[4];
- console.log("Lado da canoa", state[4]);
- //Verifica se a qtd de canibais a serem transportados é menor que a qtd de canibais no lada direito
- if (qtdMissionaries < state[missionariesOrigin]) {
- // console.log("Entrei nesse missionario");
- state[missionariesOrigin] -= 1;
- state[missionariesDest] += 1;
- }
- if (qtdCannibals < state[cannibalsOrigin]) {
- // console.log("Entrei nesse canibal");
- state[cannibalsOrigin] -= 1;
- state[cannibalsDest] += 1;
- }
- // console.log(state);
- return state;
- };
- const successors = (state) => {
- let successors = [];
- for (let i = 0; i < possibilities.length; i++) {
- var new_state = moveBoat(
- [...state],
- possibilities[i][0],
- possibilities[i][1]
- );
- console.log(
- "MOVE:",
- moveBoat([...state], possibilities[i][0], possibilities[i][1])
- );
- console.log("Successor:", new_state);
- console.log("Current", [...state]);
- if (new_state) {
- if (
- (new_state[0] < new_state[1] && new_state[0] > 0) ||
- (new_state[2] < new_state[3] && new_state[2] > 0)
- ) {
- successors.push(new_state);
- }
- }
- }
- console.log("Arr", successors);
- return successors;
- };
- successors(initial_state);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement