Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

cloner une liste doublement chainée

5 réponses
Avatar
pasdespam
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

.../...

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


.../...

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(

5 réponses

Avatar
Selso
Salut,

Question : pourquoi faire un tableau de structure destinée à faire une
liste chainée ?

Sinon avec un tableau il te suffit de faire un memcpy() ou bien
parcourir le tableau et faire '='

Selso LIBERADO
Ingénieur en déloppement Informatique Industrielle
blog : http://selso.liberado.free.fr/wordpress

Bruno Causse a écrit :
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

.../...

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


.../...

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(


Avatar
Mickaël Wolff
Selso a écrit :
Question : pourquoi faire un tableau de structure destinée à faire une
liste chainée ?



Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux
faire Bruno... c'est pour ça que je ne suis pas intervenu.


Sinon avec un tableau il te suffit de faire un memcpy() ou bien
parcourir le tableau et faire '='



GAPS ! Maheureux ! Et ces pointeurs de liste chaînée ? Ça va manquer
de cohérence !

Selso LIBERADO
Ingénieur en déloppement Informatique Industrielle



Manque des morceaux :p

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
PasDeSpam
Mickaël Wolff wrote:

Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux
faire Bruno... c'est pour ça que je ne suis pas intervenu.




le parcour des cases libres du damiers ne se fait pas dans l'ordre (a1,
a2, a3 .... h8), mais selon l'importance strategique des cases ( a1 a8 ,
h1 , h8 .......g7) quand une case est joué elle n'est plus libre (la
palice) et donc est retirée des cases libres.

au cour d'une recherche alpha-beta le cases sont retirées et reinserées
au grès du parcour de l'arbre de recherche (cela doit etre rapide).


ce tableau (qui est trompeur),
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
,ne sert qu'a alouer en memoire la liste.

celui ci,
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
a referencer les elements de la liste en fonction de leur positions
(valeur position)

ex positionToEmpties[g4] retourne un pointeur sur l'element de la liste
chainées qui a pour valeur (position) g4 et ceci qu'il soit encore
inseré ou retiré de la liste, les pointeur previous et next conserve les
references de deux elements auquels il etait (est) lié avant d'etre
retiré de la liste.

voila en esperant etre clair.
non affectées
Avatar
Pierre Maurette
Bruno Causse, le 21/10/2008 a écrit :
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

.../...

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


.../...

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(



Il me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().


--
Pierre Maurette
Avatar
pasdespam
Pierre Maurette wrote:

l me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().



eh, pas bete du tout :-)

je vais voir cela