-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEdge.java
More file actions
132 lines (120 loc) · 4.38 KB
/
Copy pathEdge.java
File metadata and controls
132 lines (120 loc) · 4.38 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
/*************************************************************************
* Compilation: javac Edge.java
* Execution: java Edge
*
* Immutable weighted edge.
*
*************************************************************************/
import java.util.Comparator;
/**
* The <tt>Edge</tt> class represents a weighted edge in an
* {@link EdgeWeightedGraph}. Each edge consists of two integers
* (naming the two vertices) and a real-value weight. The data type
* provides methods for accessing the two endpoints of the edge and
* the weight. The natural order for this data type is by
* ascending order of weight.
* <p>
* For additional documentation, see <a href="http://algs4.cs.princeton.edu/43mst">Section 4.3</a> of
* <i>Algorithms, 4th Edition</i> by Robert Sedgewick and Kevin Wayne.
*
* @author Robert Sedgewick
* @author Kevin Wayne
*/
public class Edge implements Comparable<Edge> {
private final int v;
private final int w;
private final int weight;
/**
* Initializes an edge between vertices <tt>v/tt> and <tt>w</tt> of
* the given <tt>weight</tt>.
* param v one vertex
* param w the other vertex
* param weight the weight of the edge
* @throws IndexOutOfBoundsException if either <tt>v</tt> or <tt>w</tt>
* is a negative integer
* @throws IllegalArgumentException if <tt>weight</tt> is <tt>NaN</tt>
*/
public Edge(int v, int w, int weight) {
if (v < 0) throw new IndexOutOfBoundsException("Vertex name must be a nonnegative integer");
if (w < 0) throw new IndexOutOfBoundsException("Vertex name must be a nonnegative integer");
//~ if (Double.isNaN(weight)) throw new IllegalArgumentException("Weight is NaN");
this.v = v;
this.w = w;
this.weight = weight;
}
/**
* Returns the weight of the edge.
* @return the weight of the edge
*/
public int weight() {
return weight;
}
/**
* Returns either endpoint of the edge.
* @return either endpoint of the edge
*/
public int either() {
return v;
}
/**
* Returns the endpoint of the edge that is different from the given vertex
* (unless the edge represents a self-loop in which case it returns the same vertex).
* @param vertex one endpoint of the edge
* @return the endpoint of the edge that is different from the given vertex
* (unless the edge represents a self-loop in which case it returns the same vertex)
* @throws java.lang.IllegalArgumentException if the vertex is not one of the endpoints
* of the edge
*/
public int other(int vertex) {
if (vertex == v) return w;
else if (vertex == w) return v;
else throw new IllegalArgumentException("Illegal endpoint");
}
/**
* Compares two edges by weight.
* @param that the other edge
* @return a negative integer, zero, or positive integer depending on whether
* this edge is less than, equal to, or greater than that edge
*/
public int compareTo(Edge that) {
if (this.weight() < that.weight()) return -1;
else if (this.weight() > that.weight()) return +1;
else return 0;
}
//~ Notkun: b = e.equals(d);
//~ Fyrir:
//~ Eftir: b == true þþaa e og d tengi saman sömu hnúta og hafi sömu vigt.
public boolean equals(Edge that) {
if(this.compareTo(that) != 0) return false;
int t = that.either();
int u = that.other(t);
return (t == v && u == w) || (t == w && u == v);
}
//~ Notkun:
//~ Fyrir:
//~ Eftir:
public static class lexiCompare implements Comparator<Edge> {
public int compare(Edge e1, Edge e2){
int fyrra1 = e1.either();
int fyrra2 = e2.either();
if (Integer.compare(fyrra1,fyrra2)==0)
return Integer.compare(e1.other(fyrra1),e2.other(fyrra2));
else
return Integer.compare(fyrra1,fyrra2);
}
}
/**
* Returns a string representation of the edge.
* @return a string representation of the edge
*/
public String toString() {
return v+" "+w+" "+weight;
}
/**
* Returns a string representation of the edge.
* @return a string representation of the edge
*/
public String toString2() {
return v+" "+w;
}
}