j'ai reprogrammé la fonction récursive que l'on peut voir sur ce fil :http://www.developpez.net/forums/sho...d.php?t=140810

de manière à ce qu'elle soit non récursive. Le problème est qu'il faut créer soi-même la file (ou pile, ou ce qu'on veut...) et par conséquent créer des objets "Etat" afin de les stocker provisoirement en mémoire pour pouvoir travailler sur eux par la suite :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
void ContaminationBis::contamine(int x, int y, std::vector<std::vector<int>>& populus)
{
    std::vector<Point *> stack;
    stack.insert(stack.begin(), new Point(x,y));
    Point* courant;
    while(!stack.empty())
    {
        courant = stack.back();
        stack.pop_back();
 
        if(populus[courant->x][courant->y]!=0 && populus[courant->x][courant->y]!=2)
        {
            populus[courant->x][courant->y] = 2;
            if(courant->y-1>=0 && populus[courant->x][courant->y-1]!=2)
                stack.insert(stack.begin(),new Point(courant->x, courant->y-1));
            if(courant->x-1>=0 && populus[courant->x-1][courant->y]!=2)
                stack.insert(stack.begin(),new Point(courant->x-1, courant->y));
 
            ...
        }
    }
Vu que je fais de nombreux new Point(...) je veux qu'à la fin d'une itération le noeud courant sur lequel je travail soit supprimer de la mémoire sinon je vais vite la saturer. Comment dois-je faire ? je ne connais pas l'utilisation des destructeurs, est-ce que c'est ce qu'il faut les utiliser ou rien à voir?, et si c'est le cas, comment les utilise t'on ?

merci d'avance