55public class Kruskal {
66
77 private final Graph graph ;
8- private int i = -1 ;
9- private int value = 0 ;
8+ private int stepID = -1 ;
9+ private int weight = 0 ;
1010
1111 public List <Edge > getInputEdges () {
1212 return inputEdges ;
1313 }
1414
15- private final List <Edge > inputEdges ;
15+ private List <Edge > inputEdges ;
1616 private final List <Node > inputVertices ;
1717 private final List <Edge > outputEdges ;
1818 private final List <Set <Node >> outputVertices ;
1919
20+ public boolean isStarted = false ;
2021
21- public Kruskal (Graph graph ) {
22- this .graph = graph ;
22+ public Kruskal () {
23+ this .graph = new Graph () ;
2324 inputEdges = new LinkedList <>(graph .getInputEdges ());
24- inputVertices = new LinkedList <>( graph .getInputVertices () );
25+ inputVertices = graph .getInputVertices ();
2526 outputEdges = new LinkedList <>();
2627 outputVertices = new LinkedList <>();
2728 }
2829
2930 public void sortEdges () {
31+ inputEdges = new LinkedList <>(graph .getInputEdges ());
3032 inputEdges .sort (new Comparator <Edge >() {
3133 @ Override
3234 public int compare (Edge edge1 , Edge edge2 ) {
@@ -41,6 +43,14 @@ public List<Edge> getOutputEdges() {
4143 return outputEdges ;
4244 }
4345
46+ public List <Node > getInputVertices () {
47+ return inputVertices ;
48+ }
49+
50+ public Graph getGraph () {
51+ return graph ;
52+ }
53+
4454 /**
4555 * tuple.get(0) instanceof State -- return state
4656 * tuple.get(1) instanceof Edge -- added edge
@@ -49,32 +59,39 @@ public List<Edge> getOutputEdges() {
4959 */
5060 public List <Object > nextStep () {
5161 List <Object > tuple = new LinkedList <>();
52- if (i == -1 ) {
62+ if (stepID == -1 || !isStarted ) {
63+ isStarted = true ;
64+ graph .isModified = false ;
5365 sortEdges ();
54- i ++;
66+ stepID ++;
5567 tuple .add (State .SORT );
5668 return tuple ;
5769 }
58- if (i >= inputEdges .size ()) {
70+
71+ if (stepID >= inputEdges .size () || graph .isModified ) {
72+ isStarted = false ;
5973 tuple .add (State .END );
60- tuple .add (value );
61- i = -1 ;
74+ tuple .add (weight );
75+ stepID = -1 ;
76+ graph .isModified = true ;
6277 return tuple ;
6378 }
6479
65- Edge edge = inputEdges .get (i ++);
66- value += edge .distance ;
80+ Edge edge = inputEdges .get (stepID ++);
81+ weight += edge .distance ;
6782 Set <Node > tempVertexes = new HashSet <>();
6883 Node vertex1 = edge .from ;
6984 Node vertex2 = edge .to ;
7085 tempVertexes .add (vertex1 );
7186 tempVertexes .add (vertex2 );
7287
7388 if (outputVertices .size () > 0 ) {
74- if (outputVertices .get (0 ).size () == inputEdges .size ()) {
89+ if (outputVertices .get (0 ).size () == inputVertices .size ()) {
7590 tuple .add (State .END );
76- value -= edge .distance ;
77- tuple .add (value );
91+ weight -= edge .distance ;
92+ tuple .add (weight );
93+ stepID = -1 ;
94+ graph .isModified = true ;
7895 return tuple ;
7996 }
8097 }
@@ -84,7 +101,7 @@ public List<Object> nextStep() {
84101 if (isOld (currently , tempVertexes )) {
85102 tuple .add (State .LOOP );
86103 tuple .add (edge );
87- value -= edge .distance ;
104+ weight -= edge .distance ;
88105 return tuple ;
89106 }
90107 if (isCommon (currently , tempVertexes )) {
@@ -118,13 +135,14 @@ public List<Object> nextStep() {
118135 }
119136
120137 public String kruskal () {
121- i = -1 ;
138+ stepID = -1 ;
122139 StringBuilder result = new StringBuilder ();
123140 while (true ) {
124141 List <Object > tuple = nextStep ();
125142 result .append (addStepInfo (tuple ));
126- System .err .println (tuple .get (0 ));
143+ // System.err.println(tuple.get(0));
127144 if (tuple .get (0 ) == State .END ) {
145+ graph .isModified = true ;
128146 break ;
129147 }
130148 }
@@ -179,7 +197,14 @@ private boolean isOld(Set<Node> first, Set<Node> second) {
179197 public void clearOutput () {
180198 outputEdges .clear ();
181199 outputVertices .clear ();
182- i = -1 ;
183- value = 0 ;
200+ stepID = -1 ;
201+ weight = 0 ;
202+ }
203+
204+ public void clear () {
205+ clearOutput ();
206+ inputVertices .clear ();
207+ inputEdges .clear ();
208+ graph .clear ();
184209 }
185210}
0 commit comments