-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGraph.java
More file actions
160 lines (146 loc) · 3.73 KB
/
Copy pathGraph.java
File metadata and controls
160 lines (146 loc) · 3.73 KB
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package kth.csc.inda;
/**
* A graph with a fixed number of vertices. The vertices are numbered from 0 to
* n-1, were n is the number of vertices in the graph. Edges may be added or
* removed from the graph. An edge may have an optional non-negative cost.
*
* @author Stefan Nilsson
* @version 2013-01-01
*/
public interface Graph {
/**
* An edge with no cost has this value.
*/
int NO_COST = -1;
/**
* Returns the number of vertices in this graph.
*
* @return the number of vertices in this graph
*/
int numVertices();
/**
* Returns the number of edges in this graph.
*
* @return the number of edges in this graph
*/
int numEdges();
/**
* Returns the degree of vertex v.
*
* @param v
* vertex
* @return the degree of vertex v
* @throws IllegalArgumentException
* if v is out of range
*/
int degree(int v) throws IllegalArgumentException;
/**
* Returns an iterator of vertices adjacent to v.
*
* @param v
* vertex
* @return an iterator of vertices adjacent to v
* @throws IllegalArgumentException
* if v is out of range
*/
VertexIterator neighbors(int v) throws IllegalArgumentException;
/**
* Returns true if there is an edge from v to w.
*
* @param v
* vertex
* @param w
* vertex
* @return true if there is an edge from v to w.
* @throws IllegalArgumentException
* if v or w are out of range
*/
boolean hasEdge(int v, int w) throws IllegalArgumentException;
/**
* Returns the edge cost if v and w are adjacent and an edge cost has been
* assigned, NO_COST otherwise.
*
* @param v
* vertex
* @param w
* vertex
* @return edge cost if available, NO_COST otherwise
* @throws IllegalArgumentException
* if v or w are out of range
*/
int cost(int v, int w) throws IllegalArgumentException;
/**
* Inserts a directed edge. (No edge cost is assigned.)
*
* @param from
* vertex
* @param to
* vertex
* @throws IllegalArgumentException
* if from or to are out of range
*/
void add(int from, int to) throws IllegalArgumentException;
/**
* Inserts an edge with edge cost c.
*
* @param c
* edge cost, c >= 0
* @param from
* vertex
* @param to
* vertex
* @throws IllegalArgumentException
* if from or to are out of range
* @throws IllegalArgumentException
* if c < 0
*/
void add(int from, int to, int c) throws IllegalArgumentException;
/**
* Inserts two edges between v and w. (No edge cost is assigned.)
*
* @param v
* vertex
* @param w
* vertex
* @throws IllegalArgumentException
* if v or w are out of range
*/
void addBi(int v, int w) throws IllegalArgumentException;
/**
* Inserts edges with edge cost c between v and w.
*
* @param c
* edge cost, c >= 0
* @param v
* vertex
* @param w
* vertex
* @throws IllegalArgumentException
* if v or w are out of range
* @throws IllegalArgumentException
* if c < 0
*/
void addBi(int v, int w, int c) throws IllegalArgumentException;
/**
* Removes the edge.
*
* @param from
* vertex
* @param to
* vertex
* @throws IllegalArgumentException
* if from or to are out of range
*/
void remove(int from, int to) throws IllegalArgumentException;
/**
* Removes the edges between v and w.
*
* @param v
* vertex
* @param w
* vertex
* @throws IllegalArgumentException
* if v or w are out of range
*/
void removeBi(int v, int w) throws IllegalArgumentException;
}