Pa nazalost ovde i nema mnogo mogucnosti da se iskazu programske mogucnosti jer je ima malo mogucih poteza (uvek 10 razlicitih u tvom slucaju). Jednostavno se odradi brute force svih mogucih kombinacija sa tom razlikom da ne pamtis poteze nego stanja u koje ti potezi dovode, primera radi
potez 1. 0 1
potez 2. 2 3
do istog stanja dovodi i sledeca kombinacija
potez 1. 2 3
potez 2. 0 1
jasno je da postoji jos dve kombinacije koje ce dovesti u ovo stanje sto izuzetno smanjuje broj mogucih kombinacija.
Znaci kada odradis brute force svih mogucih kombinacija i napravis stablo sa 10 grana. jednostavno pogledas koja su sve dobitna stanja i vracas se na taj nacin u nazad tako sto u svakom stanju odredis koji te to potez vodi u dobitno stanje i tu se prica onda zavrsava. Posle toga treba uraditi samo dump celog tog drveta u neku strukturu. recimo dvodimenzioni niz od 11 * n (gde je n broj svih mogucih stanja) a onaj 11. element je izbor najboljeg stanja ili cak moze taj integer da se bitski podeli pa da se na taj nacin odredi potencijal za svako stanje.
Ovakav algoritam sam radio pre jedno 6-7 godina na fakultetu kada smo pravili isto takmicenje doduse tabla je bila 8x8, imam cak negde source, jeste da sam brute force radio jedno 10-15 dana dok nije proleteo kompletno strukturu, ali posle toga ovaj algoritam igra svaki potez kroz manje od milisekunde 😉
za situaciju bez neutralnih polja bi izgledao ovako nekako
/* states je dvodimenzioni niz[n][11] generisan brute force programom */
int GameMove(int move) {
static unsigned int current_state=0,player=0;
unsigned int new_state;
int my_move,;
if(move==-1) {
my_move=state[0][10];
current_state=state[0][my_move];
}
else {
new_state=states[current_state][move];
my_move=states[new_state][10];
current_state=states[new_state][my_move];
}
return my_move;
}
I kao sto vidis duzina funkcije je jako kratka, i ultra brza. :banana: