-
Notifications
You must be signed in to change notification settings - Fork 0
/
GrapheListe.java
119 lines (92 loc) · 2.11 KB
/
GrapheListe.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
Representation d'un graphe sous la forme
de listes d'adjacence
Chaque noeud a une liste chainee qui contient
les arcs sortant
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.Iterable;
import java.util.ArrayList;
import java.util.Scanner;
public class GrapheListe implements IGraphe {
private int nbnoeuds, nbarcs;
private boolean est_dirige;
private ArrayList<ListeChainee<Arc>> arcs;
private ArrayList<Node> nodes;
public GrapheListe(int noeuds, boolean dir) {
nbnoeuds = noeuds;
est_dirige = dir;
arcs = new ArrayList<ListeChainee<Arc>>();
nodes = new ArrayList<Node>();
for (int i = 0; i < nbnoeuds; i++) {
arcs.add(new ListeChainee<Arc>());
}
}
public static IGraphe readFromFile(String path, boolean dir) {
GrapheListe g = null;
try {
var scanner = new Scanner(new File(path));
while (scanner.hasNext()) {
var type = scanner.next();
if (type.equals("p")) {
scanner.next();
var nodes = scanner.nextInt();
scanner.next();
g = new GrapheListe(nodes, dir);
} else {
var de = scanner.nextInt() - 1;
var vers = scanner.nextInt() - 1;
if (g != null)
g.Ajouter(new Arc(de, vers));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return g;
}
public int NbNoeuds() {
return nbnoeuds;
}
public int NbArcs() {
return nbarcs;
}
public boolean EstDirige() {
return est_dirige;
}
public void Ajouter(Arc a) {
arcs.get(a.de).Ajouter(a);
nbarcs++;
if (!est_dirige) {
arcs.get(a.vers).Ajouter(new Arc(a.vers, a.de));
nbarcs++;
}
}
// retour vrai si l'arc de i a j existe
public boolean Existe(int i, int j) {
for (Arc a : arcs.get(i)) {
if (a.vers == j) {
return true;
}
}
return false;
}
// retourne un objet contenant tous les arcs sortant de i
public Iterable<Arc> Adjacents(int i) {
return arcs.get(i);
}
public ArrayList<Node> getNodes() {
return nodes;
}
public int Degree(int i) {
return arcs.get(i).Compte();
}
public String toString() {
String str = "";
for (Node node : nodes) {
str += node;
}
return str;
}
}