iterator fix
This commit is contained in:
parent
24859d45ab
commit
514e6de373
@ -1,77 +1,73 @@
|
|||||||
package com.baeldung.algorithms.prim;
|
package com.baeldung.algorithms.prim;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.math3.util.Pair;
|
import org.apache.commons.math3.util.Pair;
|
||||||
|
|
||||||
public class Prim {
|
public class Prim {
|
||||||
|
|
||||||
private List<Vertex> graph;
|
private List<Vertex> graph;
|
||||||
|
|
||||||
public Prim(List<Vertex> graph) {
|
public Prim(List<Vertex> graph){
|
||||||
this.graph = graph;
|
this.graph = graph;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run(){
|
||||||
if (graph.size() > 0) {
|
if (graph.size() > 0){
|
||||||
graph.get(0)
|
graph.get(0).setVisited(true);
|
||||||
.setVisited(true);
|
}
|
||||||
}
|
while (isDisconnected()){
|
||||||
while (isDisconnected()) {
|
Edge nextMinimum = new Edge(Integer.MAX_VALUE);
|
||||||
Edge nextMinimum = new Edge(Integer.MAX_VALUE);
|
Vertex nextVertex = graph.get(0);
|
||||||
Vertex nextVertex = graph.get(0);
|
for (Vertex vertex : graph){
|
||||||
for (Vertex vertex : graph) {
|
if (vertex.isVisited()){
|
||||||
if (vertex.isVisited()) {
|
Pair<Vertex, Edge> candidate = vertex.nextMinimum();
|
||||||
Pair<Vertex, Edge> candidate = vertex.nextMinimum();
|
if (candidate.getValue().getWeight() < nextMinimum.getWeight()){
|
||||||
if (candidate.getValue()
|
nextMinimum = candidate.getValue();
|
||||||
.getWeight() < nextMinimum.getWeight()) {
|
nextVertex = candidate.getKey();
|
||||||
nextMinimum = candidate.getValue();
|
}
|
||||||
nextVertex = candidate.getKey();
|
}
|
||||||
}
|
}
|
||||||
}
|
nextMinimum.setIncluded(true);
|
||||||
}
|
nextVertex.setVisited(true);
|
||||||
nextMinimum.setIncluded(true);
|
}
|
||||||
nextVertex.setVisited(true);
|
}
|
||||||
}
|
|
||||||
}
|
private boolean isDisconnected(){
|
||||||
|
for (Vertex vertex : graph){
|
||||||
private boolean isDisconnected() {
|
if (!vertex.isVisited()){
|
||||||
for (Vertex vertex : graph) {
|
return true;
|
||||||
if (!vertex.isVisited()) {
|
}
|
||||||
return true;
|
}
|
||||||
}
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
public String originalGraphToString(){
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
public String originalGraphToString() {
|
for (Vertex vertex : graph){
|
||||||
StringBuilder sb = new StringBuilder();
|
sb.append(vertex.originalToString());
|
||||||
for (Vertex vertex : graph) {
|
}
|
||||||
sb.append(vertex.originalToString());
|
return sb.toString();
|
||||||
}
|
}
|
||||||
return sb.toString();
|
|
||||||
}
|
public void resetPrintHistory(){
|
||||||
|
for (Vertex vertex : graph){
|
||||||
public void resetPrintHistory() {
|
Iterator<Map.Entry<Vertex,Edge>> it = vertex.getEdges().entrySet().iterator();
|
||||||
for (Vertex vertex : graph) {
|
while (it.hasNext()) {
|
||||||
Iterator it = vertex.getEdges()
|
Map.Entry<Vertex,Edge> pair = it.next();
|
||||||
.entrySet()
|
pair.getValue().setPrinted(false);
|
||||||
.iterator();
|
}
|
||||||
while (it.hasNext()) {
|
}
|
||||||
Map.Entry pair = (Map.Entry) it.next();
|
}
|
||||||
((Edge) pair.getValue()).setPrinted(false);
|
|
||||||
}
|
public String minimumSpanningTreeToString(){
|
||||||
}
|
StringBuilder sb = new StringBuilder();
|
||||||
}
|
for (Vertex vertex : graph){
|
||||||
|
sb.append(vertex.includedToString());
|
||||||
public String minimumSpanningTreeToString() {
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
return sb.toString();
|
||||||
for (Vertex vertex : graph) {
|
}
|
||||||
sb.append(vertex.includedToString());
|
|
||||||
}
|
}
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -1,103 +1,106 @@
|
|||||||
package com.baeldung.algorithms.prim;
|
package com.baeldung.algorithms.prim;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.math3.util.Pair;
|
import org.apache.commons.math3.util.Pair;
|
||||||
|
|
||||||
public class Vertex {
|
public class Vertex {
|
||||||
|
|
||||||
private String label = null;
|
private String label = null;
|
||||||
private Map<Vertex, Edge> edges = new HashMap<>();
|
private Map<Vertex, Edge> edges = new HashMap<>();
|
||||||
private boolean isVisited = false;
|
private boolean isVisited = false;
|
||||||
|
|
||||||
public Vertex(String label) {
|
public Vertex(String label){
|
||||||
this.label = label;
|
this.label = label;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLabel() {
|
public String getLabel() {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLabel(String label) {
|
public void setLabel(String label) {
|
||||||
this.label = label;
|
this.label = label;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Vertex, Edge> getEdges() {
|
public Map<Vertex, Edge> getEdges() {
|
||||||
return edges;
|
return edges;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addEdge(Vertex vertex, Edge edge) {
|
public void addEdge(Vertex vertex, Edge edge){
|
||||||
this.edges.put(vertex, edge);
|
if (this.edges.containsKey(vertex)){
|
||||||
}
|
if (edge.getWeight() < this.edges.get(vertex).getWeight()){
|
||||||
|
this.edges.replace(vertex, edge);
|
||||||
public boolean isVisited() {
|
}
|
||||||
return isVisited;
|
} else {
|
||||||
}
|
this.edges.put(vertex, edge);
|
||||||
|
}
|
||||||
public void setVisited(boolean visited) {
|
}
|
||||||
isVisited = visited;
|
|
||||||
}
|
public boolean isVisited() {
|
||||||
|
return isVisited;
|
||||||
public Pair<Vertex, Edge> nextMinimum() {
|
}
|
||||||
Edge nextMinimum = new Edge(Integer.MAX_VALUE);
|
|
||||||
Vertex nextVertex = this;
|
public void setVisited(boolean visited) {
|
||||||
Iterator it = edges.entrySet()
|
isVisited = visited;
|
||||||
.iterator();
|
}
|
||||||
while (it.hasNext()) {
|
|
||||||
Map.Entry pair = (Map.Entry) it.next();
|
public Pair<Vertex, Edge> nextMinimum(){
|
||||||
if (!((Vertex) pair.getKey()).isVisited()) {
|
Edge nextMinimum = new Edge(Integer.MAX_VALUE);
|
||||||
if (!((Edge) pair.getValue()).isIncluded()) {
|
Vertex nextVertex = this;
|
||||||
if (((Edge) pair.getValue()).getWeight() < nextMinimum.getWeight()) {
|
Iterator<Map.Entry<Vertex,Edge>> it = edges.entrySet().iterator();
|
||||||
nextMinimum = (Edge) pair.getValue();
|
while (it.hasNext()) {
|
||||||
nextVertex = (Vertex) pair.getKey();
|
Map.Entry<Vertex,Edge> pair = it.next();
|
||||||
}
|
if (!pair.getKey().isVisited()){
|
||||||
}
|
if (!pair.getValue().isIncluded()) {
|
||||||
}
|
if (pair.getValue().getWeight() < nextMinimum.getWeight()) {
|
||||||
}
|
nextMinimum = pair.getValue();
|
||||||
return new Pair<>(nextVertex, nextMinimum);
|
nextVertex = pair.getKey();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public String originalToString() {
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
}
|
||||||
Iterator it = edges.entrySet()
|
return new Pair<>(nextVertex, nextMinimum);
|
||||||
.iterator();
|
}
|
||||||
while (it.hasNext()) {
|
|
||||||
Map.Entry pair = (Map.Entry) it.next();
|
public String originalToString(){
|
||||||
if (!((Edge) pair.getValue()).isPrinted()) {
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(getLabel());
|
Iterator<Map.Entry<Vertex,Edge>> it = edges.entrySet().iterator();
|
||||||
sb.append(" --- ");
|
while (it.hasNext()) {
|
||||||
sb.append(((Edge) pair.getValue()).getWeight());
|
Map.Entry<Vertex,Edge> pair = it.next();
|
||||||
sb.append(" --- ");
|
if (!pair.getValue().isPrinted()) {
|
||||||
sb.append(((Vertex) pair.getKey()).getLabel());
|
sb.append(getLabel());
|
||||||
sb.append("\n");
|
sb.append(" --- ");
|
||||||
((Edge) pair.getValue()).setPrinted(true);
|
sb.append(pair.getValue().getWeight());
|
||||||
}
|
sb.append(" --- ");
|
||||||
}
|
sb.append(pair.getKey().getLabel());
|
||||||
return sb.toString();
|
sb.append("\n");
|
||||||
}
|
pair.getValue().setPrinted(true);
|
||||||
|
}
|
||||||
public String includedToString() {
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
return sb.toString();
|
||||||
if (isVisited()) {
|
}
|
||||||
Iterator it = edges.entrySet()
|
|
||||||
.iterator();
|
public String includedToString(){
|
||||||
while (it.hasNext()) {
|
StringBuilder sb = new StringBuilder();
|
||||||
Map.Entry pair = (Map.Entry) it.next();
|
if (isVisited()) {
|
||||||
if (((Edge) pair.getValue()).isIncluded()) {
|
Iterator<Map.Entry<Vertex,Edge>> it = edges.entrySet().iterator();
|
||||||
if (!((Edge) pair.getValue()).isPrinted()) {
|
while (it.hasNext()) {
|
||||||
sb.append(getLabel());
|
Map.Entry<Vertex,Edge> pair = it.next();
|
||||||
sb.append(" --- ");
|
if (pair.getValue().isIncluded()) {
|
||||||
sb.append(((Edge) pair.getValue()).getWeight());
|
if (!pair.getValue().isPrinted()) {
|
||||||
sb.append(" --- ");
|
sb.append(getLabel());
|
||||||
sb.append(((Vertex) pair.getKey()).getLabel());
|
sb.append(" --- ");
|
||||||
sb.append("\n");
|
sb.append(pair.getValue().getWeight());
|
||||||
((Edge) pair.getValue()).setPrinted(true);
|
sb.append(" --- ");
|
||||||
}
|
sb.append(pair.getKey().getLabel());
|
||||||
}
|
sb.append("\n");
|
||||||
}
|
pair.getValue().setPrinted(true);
|
||||||
}
|
}
|
||||||
return sb.toString();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user