Skip to content

Commit d4a4c9d

Browse files
committed
feat: 기존과 같은 부분 구현
아... 그냥 상속을 통해서 확장해서 쓸 걸... 이라는 생각이 들었습니다.
1 parent 49d44bc commit d4a4c9d

File tree

1 file changed

+74
-3
lines changed

1 file changed

+74
-3
lines changed

yoonexample/src/main/java/graph/ListWeightGraph.java

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package graph;
22

33
import java.util.Comparator;
4+
import java.util.StringJoiner;
45
import list.DummyDoublyLinkedList;
56
import list.List;
67
import priorityqueue.HeapPriorityQueue;
78
import priorityqueue.PriorityQueue;
9+
import queue.LinkedListQueue;
10+
import queue.Queue;
11+
import stack.ListStack;
12+
import stack.Stack;
813

914
public class ListWeightGraph implements WeightedGraph {
1015

@@ -49,17 +54,83 @@ public void addEdge(Enum<?> fromV, Enum<?> toV) {
4954

5055
@Override
5156
public String showGraphEdgeInfo() {
52-
return null;
57+
StringBuilder sb = new StringBuilder();
58+
59+
for (List<Enum<?>> vertex : vertices) {
60+
if (vertex.size() > 1) {
61+
for (int i = 0; i < vertex.size(); i++) {
62+
sb.append(vertex.get(i));
63+
if (i == 0) {
64+
sb.append(": ");
65+
} else if (i < vertex.size() - 1) {
66+
sb.append(" ");
67+
}
68+
}
69+
sb.append("\n");
70+
}
71+
}
72+
73+
return sb.toString();
5374
}
5475

5576
@Override
5677
public String depthFirstSearch(Enum<?> startV) {
57-
return null;
78+
boolean[] visited = new boolean[vertices.length];
79+
StringJoiner sj = new StringJoiner(" ");
80+
Stack<Enum<?>> vertexStack = new ListStack<>();
81+
vertexStack.push(startV);
82+
83+
while (!vertexStack.isEmpty()) {
84+
Enum<?> visitV = vertexStack.pop();
85+
86+
if (visitVertex(visited, visitV)) {
87+
sj.add(visitV.toString());
88+
}
89+
List<Enum<?>> vertexList = vertices[visitV.ordinal()];
90+
for (int i = 0; i < vertexList.size(); i++) {
91+
Enum<?> vertex = vertexList.get(i);
92+
if (!visited[vertex.ordinal()]) {
93+
vertexStack.push(vertex);
94+
}
95+
}
96+
}
97+
98+
return sj.toString();
5899
}
59100

60101
@Override
61102
public String breadthFirstSearch(Enum<?> startV) {
62-
return null;
103+
boolean[] visited = new boolean[vertices.length];
104+
StringJoiner sj = new StringJoiner(" ");
105+
Queue<Enum<?>> vertexQueue = new LinkedListQueue<>();
106+
vertexQueue.enqueue(startV);
107+
108+
while (!vertexQueue.isEmpty()) {
109+
Enum<?> visitV = vertexQueue.dequeue();
110+
111+
if (visitVertex(visited, visitV)) {
112+
sj.add(visitV.toString());
113+
}
114+
115+
List<Enum<?>> vertexList = vertices[visitV.ordinal()];
116+
for (int i = 0; i < vertexList.size(); i++) {
117+
Enum<?> vertex = vertexList.get(i);
118+
if (!visited[vertex.ordinal()]) {
119+
vertexQueue.enqueue(vertex);
120+
}
121+
}
122+
123+
}
124+
125+
return sj.toString();
126+
}
127+
128+
private boolean visitVertex(boolean[] visited, Enum<?> vertex) {
129+
if (visited[vertex.ordinal()]) {
130+
return false;
131+
}
132+
visited[vertex.ordinal()] = true;
133+
return true;
63134
}
64135

65136
private static class WeightEdge {

0 commit comments

Comments
 (0)