class List { int val ; List next ; List (int val, List next) { this.val = val ; this.next = next ; } } |
p
est de type List
, peut on toujours faire p.val
?
p
à la liste
1, 2, 3 ?
this.next =next
?
Proposer un codage qui évite this
.
interface Bag { boolean isEmpty () ; void add(int s) ; // Ajoute un élément au sac. int get() ; // Renvoie (et enlève) un élement du sac. } |
// b est un Bag for (int i = 0 ; i < 16 ; i++) b.add(i) ; while (!b.isEmpty()) System.out.println(b.get()) ; |
Lifo
des piles implémentant
l'interface Bag
.
class Graph { // Graphes non-orientés static List [] succ ; static void empty(int size) { succ = new List[size] ;} static void add(int src, int dst) { succ[src] = new List (dst,succ[src]) ; succ[dst] = new List (src,succ[dst]) ; } |
succ[src] = new List (dst, succ[src])
et
succ = new List [size]
?
static void xfs(int s, Bag b) { boolean [] vu = new boolean[succ.length] ; b.add(s) ; vu[s] = true ; do { int n = b.get() ; System.out.print(" " + n) ; for (List p = succ[n] ; p != null ; p = p.next) if (!vu[p.val]) { b.add(p.val) ; vu[p.val] = true ; } } while (!b.isEmpty()) ; } |
n
?
static int [] findSpanningTree(int s, Bag b) { int [] pere = new int[succ.length] ; for (int i = pere.length-1 ; i >= 0 ; i--) pere[i] = -1 ; b.add(s) ; pere[s] = s ; // par convention do { int n = b.get() ; for (List p = succ[n] ; p != null ; p = p.next) if (pere[p.val] < 0) { b.add(p.val) ; pere[p.val] = n; } } while (!b.isEmpty()) ; return pere ; } |
pere
est-il initialisé explicitement ?
static private void doDfs (int s, int pere,boolean [] vu) { if (vu[s]) return ; vu[s] = true ; System.out.print (" " + s + "<" + pere + ">") ; for (List p = succ[s] ; p != null ; p = p.next) { doDfs(p.val, s, vu) ; } } static void dfs(int s) { boolean [] vu = new boolean [succ.length] ; doDfs(s,s,vu) ; } |
Ce document a été traduit de LATEX par HEVEA et HACHA.