1. Pas vraiment, si on remplace ses deux occurrences par b.get on retire deux éléments du sac à chaque itération.

  2. Divisons l'ensemble d'abord en deux, sommets vus et non-vus (selon la valeur de vu[s]). Puis divisons vraiment en trois, non-vus N, dans le sac (et donc forcément vus) S, et visités V.

    Chaque itération de la boucle while termine (car la boucle for termine) et se solde par l'ajout d'exactement un élément à V. Le programme termine donc, car V ne peut croître indéfiniment.

  3. À un instant donné, les sommets affichés sont ceux de V. Dès qu'un sommet passe de S à V tous ses voisins non encore vus passent de N à S et donc seront affichés une fois le programme terminé (S est alors vide).

    On procède par induction sur la longueur du chemin de s à s' (car on se souvient de la définition de la composante connexe). En fait les sommets affichés sont exactement ceux que l'on peut atteindre à partir de s, puisqu'aucun sommet n'est affiché deux fois.

  4. On voit facilement que la boucle while s'exécute V fois (c'est la preuve de terminaison). Reste à majorer le nombre d'itérations de la boucle for. On procède globalement. Pour un sommet donné (une itération donnée de la boucle while), tous les voisins sont examinés une fois. Chaque arc est donc examiné deux fois.

  5. Il faut parcourir tous les sommets du graphe. Une technique possible est de faire de vu un tableau d'entiers destiné à enregistrer les numéros de composante connexe.
      private static void xcc(int s, Bag b,int [] cc, int ncc) {

        b.add(s) ; cc[s] = ncc ;
        
    while (!b.isEmpty()) {
          
    int n = b.get() ;
          System.out.print(" " + n) ;
          
    for (List p = succ[n] ; p != null ; p = p.next)
            
    if (cc[p.val] == 0) {
              b.add(p.val) ; cc[p.val] = ncc ;
            }
        }
        System.out.println() ;
      }

      
    static void findCC(Bag b) {
        
    int [] cc = new int[succ.length] ;
        
    int ncc = 1 ;
        
    for (int s = 0 ; s < succ.length ; s++)
          
    if (cc[s] == 0) {
            xcc(s,b,cc,ncc) ;
            ncc++ ;
          }
      }