Class DefaultGraph
java.lang.Object
com.github.yellowstonegames.path.Graph<com.github.yellowstonegames.grid.Coord>
com.github.yellowstonegames.path.UndirectedGraph<com.github.yellowstonegames.grid.Coord>
com.github.yellowstonegames.path.DefaultGraph
- All Implemented Interfaces:
com.github.yellowstonegames.core.ISerializersNeeded, Externalizable, Serializable
public class DefaultGraph
extends UndirectedGraph<com.github.yellowstonegames.grid.Coord>
implements com.github.yellowstonegames.core.ISerializersNeeded
A default setting for an
UndirectedGraph of Coord vertices where all connections have cost 1. This should be
initialized with a 2D (rectangular) char array using the map convention where '#' is a wall and anything else
is passable.- See Also:
-
Field Summary
FieldsFields inherited from class UndirectedGraph
algorithms -
Constructor Summary
ConstructorsConstructorDescriptionNo-op no-arg constructor, present for serialization; if you use this you must callinit(char[][])orinit(char[][], boolean)before using the DefaultGraph.DefaultGraph(char[][] map) Builds a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable.DefaultGraph(char[][] map, boolean eightWay) Builds a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable. -
Method Summary
Modifier and TypeMethodDescriptionGraph<com.github.yellowstonegames.grid.Coord> breadthFirstSearch(com.github.yellowstonegames.grid.Coord coord) Perform a breadth first search starting from the specified vertex.Graph<com.github.yellowstonegames.grid.Coord> breadthFirstSearch(com.github.yellowstonegames.grid.Coord coord, int maxVertices, int maxDepth) Perform a breadth first search starting from the specified vertex.booleanChecks whether there are any cycles in the graph using depth first searches.Graph<com.github.yellowstonegames.grid.Coord> depthFirstSearch(com.github.yellowstonegames.grid.Coord coord) Perform a depth first search starting from the specified vertex.Graph<com.github.yellowstonegames.grid.Coord> depthFirstSearch(com.github.yellowstonegames.grid.Coord coord, int maxVertices, int maxDepth) Perform a depth first search starting from the specified vertex.booleandoublefindMinimumDistance(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target) Find the shortest path between the start and target vertices, using Dijkstra's algorithm implemented with a priority queue.Graph<com.github.yellowstonegames.grid.Coord> Find a minimum weight spanning tree using Kruskal's algorithm.com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> findShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target) Find the shortest path between the start and target vertices, using Dijkstra's algorithm implemented with a priority queue.booleanfindShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target, com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> path, Heuristic<com.github.yellowstonegames.grid.Coord> heuristic) Find the shortest path between the start and target vertices, using the A* search algorithm with the provided heuristic, and implemented with a priority queue.com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> findShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target, Heuristic<com.github.yellowstonegames.grid.Coord> heuristic) Find the shortest path between the start and target vertices, using the A* search algorithm with the provided heuristic, and implemented with a priority queue.Gets a List of Class instances that must each be registered with a serialization library before this object can be successfully serialized or deserialized.inthashCode()voidinit(char[][] map) Re-initializes a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable.voidinit(char[][] map, boolean eightWay) Re-initializes this DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable.voidMeant for deserialization using Fory.char[]show()Creates a 1D char array (which can be passed toString.valueOf(char[])) filled with a grid made of the vertices in this Graph and their estimated costs, if this has done an estimate.toString()voidMeant for serialization using Fory.Methods inherited from class UndirectedGraph
addConnection, algorithms, createNew, getEdge, isDirected, obtainEdge, removeConnectionMethods inherited from class Graph
addConnection, addEdge, addEdge, addVertex, addVertices, addVertices, connectionExists, contains, disconnect, disconnect, edgeExists, getEdge, getEdgeCount, getEdges, getEdges, getNode, getNodes, getVertices, removeAllEdges, removeAllVertices, removeEdge, removeEdge, removeEdgeIf, removeEdges, removeNode, removeVertex, removeVertexIf, removeVertices, size, sortEdges, sortVertices
-
Field Details
-
width
public int width -
height
public int height
-
-
Constructor Details
-
DefaultGraph
public DefaultGraph()No-op no-arg constructor, present for serialization; if you use this you must callinit(char[][])orinit(char[][], boolean)before using the DefaultGraph. -
DefaultGraph
public DefaultGraph(char[][] map) Builds a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable. This only builds connections along cardinal directions.- Parameters:
map- a 2D char array where'#'represents an inaccessible area (such as a wall) and anything else is walkable
-
DefaultGraph
public DefaultGraph(char[][] map, boolean eightWay) Builds a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable. IfeightWayis true, this builds connections along diagonals as well as along cardinals, but ifeightWayis false, it only builds connections along cardinal directions.- Parameters:
map- a 2D char array where'#'represents an inaccessible area (such as a wall) and anything else is walkableeightWay- if true, this will build connections on diagonals as well as cardinal directions; if false, this will only use cardinal connections
-
-
Method Details
-
init
public void init(char[][] map) Re-initializes a DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable. This only builds connections along cardinal directions.- Parameters:
map- a 2D char array where'#'represents an inaccessible area (such as a wall) and anything else is walkable
-
init
public void init(char[][] map, boolean eightWay) Re-initializes this DefaultGraph from a 2D char array that uses'#'to represent any kind of inaccessible cell, with all other chars treated as walkable. IfeightWayis true, this builds connections along diagonals as well as along cardinals, but ifeightWayis false, it only builds connections along cardinal directions.- Parameters:
map- a 2D char array where'#'represents an inaccessible area (such as a wall) and anything else is walkableeightWay- if true, this will build connections on diagonals as well as cardinal directions; if false, this will only use cardinal connections
-
findMinimumWeightSpanningTree
Find a minimum weight spanning tree using Kruskal's algorithm.- Returns:
- a Graph object containing a minimum weight spanning tree (if this graph is connected - in general a minimum weight spanning forest)
-
findShortestPath
public com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> findShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target) Find the shortest path between the start and target vertices, using Dijkstra's algorithm implemented with a priority queue.- Parameters:
start- the starting vertextarget- the target vertex- Returns:
- a list of vertices from start to target containing the ordered vertices of a shortest path, including both the start and target vertices
-
findShortestPath
public com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> findShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target, Heuristic<com.github.yellowstonegames.grid.Coord> heuristic) Find the shortest path between the start and target vertices, using the A* search algorithm with the provided heuristic, and implemented with a priority queue.- Parameters:
start- the starting vertextarget- the target vertexheuristic- typically predefined inHeuristic, this determines how the optimal path will be estimated- Returns:
- a list of vertices from start to target containing the ordered vertices of a shortest path, including both the start and target vertices
-
findShortestPath
public boolean findShortestPath(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target, com.github.tommyettinger.ds.ObjectDeque<com.github.yellowstonegames.grid.Coord> path, Heuristic<com.github.yellowstonegames.grid.Coord> heuristic) Find the shortest path between the start and target vertices, using the A* search algorithm with the provided heuristic, and implemented with a priority queue. Fills path with a list of vertices from start to target containing the ordered vertices of a shortest path, including both the start and target vertices.- Parameters:
start- the starting vertextarget- the target vertexpath- the list of vertices to which the path vertices should be added- Returns:
- true if a path was found, or false if no path could be found
-
findMinimumDistance
public double findMinimumDistance(com.github.yellowstonegames.grid.Coord start, com.github.yellowstonegames.grid.Coord target) Find the shortest path between the start and target vertices, using Dijkstra's algorithm implemented with a priority queue.- Parameters:
start- the starting vertextarget- the target vertex- Returns:
- the sum of the weights in a shortest path from the starting vertex to the target vertex
-
breadthFirstSearch
public Graph<com.github.yellowstonegames.grid.Coord> breadthFirstSearch(com.github.yellowstonegames.grid.Coord coord, int maxVertices, int maxDepth) Perform a breadth first search starting from the specified vertex.- Parameters:
coord- the vertex at which to start the searchmaxVertices- the maximum number of vertices to process before terminating the searchmaxDepth- the maximum edge distance (the number of edges in a shortest path between vertices) a vertex should have to be considered for processing. If a vertex has a distance larger than the maxDepth, it will not be added to the returned graph- Returns:
- a Graph object containing all the processed vertices, and the edges from which each vertex was encountered.
The vertices and edges in the returned graph will be in the order they were encountered in the search, and this will be
reflected in the iteration order of the collections returned by
Graph.getVertices()andGraph.getEdges().
-
breadthFirstSearch
public Graph<com.github.yellowstonegames.grid.Coord> breadthFirstSearch(com.github.yellowstonegames.grid.Coord coord) Perform a breadth first search starting from the specified vertex.- Parameters:
coord- the vertex at which to start the search- Returns:
- a Graph object containing all the processed vertices (all the vertices in this graph), and the edges from which each vertex was encountered.
The vertices and edges in the returned graph will be in the order they were encountered in the search, and this will be
reflected in the iteration order of the collections returned by
Graph.getVertices()andGraph.getEdges().
-
depthFirstSearch
public Graph<com.github.yellowstonegames.grid.Coord> depthFirstSearch(com.github.yellowstonegames.grid.Coord coord, int maxVertices, int maxDepth) Perform a depth first search starting from the specified vertex.- Parameters:
coord- the vertex at which to start the searchmaxVertices- the maximum number of vertices to process before terminating the searchmaxDepth- the maximum edge distance (the number of edges in a shortest path between vertices) a vertex should have to be considered for processing. If a vertex has a distance larger than the maxDepth, it will not be added to the returned graph- Returns:
- a Graph object containing all the processed vertices, and the edges from which each vertex was encountered.
The vertices and edges in the returned graph will be in the order they were encountered in the search, and this will be
reflected in the iteration order of the collections returned by
Graph.getVertices()andGraph.getEdges().
-
depthFirstSearch
public Graph<com.github.yellowstonegames.grid.Coord> depthFirstSearch(com.github.yellowstonegames.grid.Coord coord) Perform a depth first search starting from the specified vertex.- Parameters:
coord- the vertex at which to start the search- Returns:
- a Graph object containing all the processed vertices (all the vertices in this graph), and the edges from which each vertex was encountered.
The vertices and edges in the returned graph will be in the order they were encountered in the search, and this will be
reflected in the iteration order of the collections returned by
Graph.getVertices()andGraph.getEdges().
-
containsCycle
public boolean containsCycle()Checks whether there are any cycles in the graph using depth first searches.- Returns:
- true if the graph contains a cycle, false otherwise
-
writeExternal
Meant for serialization using Fory. If a class overrides this with different behavior,readExternal(ObjectInput)must also be overridden to match that behavior.- Specified by:
writeExternalin interfaceExternalizable- Overrides:
writeExternalin classGraph<com.github.yellowstonegames.grid.Coord>- Parameters:
out- the stream to write the object to- Throws:
IOException- Includes any I/O exceptions that may occur
-
readExternal
Meant for deserialization using Fory. If a class overrides this with different behavior,writeExternal(ObjectOutput)must also be overridden to match that behavior.- Specified by:
readExternalin interfaceExternalizable- Overrides:
readExternalin classGraph<com.github.yellowstonegames.grid.Coord>- Parameters:
in- the stream to read data from in order to restore the object- Throws:
IOException- if I/O errors occurClassNotFoundException- If the class for an object being restored cannot be found.
-
show
public char[] show()Creates a 1D char array (which can be passed toString.valueOf(char[])) filled with a grid made of the vertices in this Graph and their estimated costs, if this has done an estimate. Each estimate is rounded to the nearest int and only printed if it is 4 digits or less; otherwise this puts '####' in the grid cell. This is a building-block for toString() implementations that may have debugging uses as well.- Returns:
- a 1D char array containing newline-separated rows of space-separated grid cells that contain estimated costs or '####' for unexplored
-
equals
-
hashCode
-
toString
- Overrides:
toStringin classUndirectedGraph<com.github.yellowstonegames.grid.Coord>
-
getSerializersNeeded
Gets a List of Class instances that must each be registered with a serialization library before this object can be successfully serialized or deserialized. This isGwtIncompatible; none of the serialization libraries this is meant for have any support for GWT.- Specified by:
getSerializersNeededin interfacecom.github.yellowstonegames.core.ISerializersNeeded- Returns:
- a List of Class instances that must each be registered with a serialization library
-