Skip to content

Commit 7eb7db9

Browse files
committed
Разделение GUI и алгоритма
1 parent 42420c2 commit 7eb7db9

File tree

6 files changed

+634
-630
lines changed

6 files changed

+634
-630
lines changed

src/main/java/ru/etu/practice/Edge.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public class Edge {
44
@Override
55
public String toString() {
6-
return "Edge " + " " + from + "—" + to + " " + distance + '\n';
6+
return "Edge " + " " + from + "—" + to + " " + distance;
77
}
88

99
/**

src/main/java/ru/etu/practice/Graph.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,55 @@
33
import java.util.*;
44

55
public class Graph {
6-
private static final int SIZE = 26;
6+
// private static final int SIZE = 26;
77

88
private List<Edge> inputEdges;
9-
private Set<Node> inputVertices;
9+
private List<Node> inputVertices;
10+
public boolean isModified = false;
11+
12+
// public
1013

1114
public List<Edge> getInputEdges() {
1215
return inputEdges;
1316
}
1417

15-
public Set<Node> getInputVertices() {
18+
public List<Node> getInputVertices() {
1619
return inputVertices;
1720
}
1821

1922
public Graph() {
23+
this.inputEdges = new LinkedList<>();
24+
this.inputVertices = new LinkedList<>();
25+
}
26+
27+
// public void initGraph(List<Edge> inputEdges, List<Node> inputVertices) {
28+
// this.inputEdges = new LinkedList<>(inputEdges);
29+
// this.inputVertices = new LinkedList<>(inputVertices);
30+
// }
31+
32+
public void addEdge(Node from, Node to, int distance) {
33+
Edge newEdge = new Edge(from, to, distance);
34+
for (Edge edge : inputEdges)
35+
if (edge.equalsWay(newEdge))
36+
return;
37+
inputEdges.add(newEdge);
38+
isModified = true;
39+
}
40+
41+
public void addVertex(Node node) {
42+
if (!inputVertices.contains(node))
43+
inputVertices.add(node);
44+
isModified = true;
45+
}
2046

47+
public void addVertex() {
48+
int len = inputVertices.size();
49+
inputVertices.add(new Node((char)('a' + len)));
2150
}
2251

23-
public void initGraph(List<Edge> inputEdges, List<Node> inputVertices) {
24-
this.inputEdges = new LinkedList<>(inputEdges);
25-
this.inputVertices = new HashSet<>(inputVertices);
52+
public void clear() {
53+
inputVertices.clear();
54+
inputEdges.clear();
55+
isModified = false;
2656
}
2757
}

src/main/java/ru/etu/practice/Kruskal.java

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,30 @@
55
public 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

Comments
 (0)