Skip to main content

PathFind

Unittest License Package version Supported Python versions

Implementation of path finding algorithms including:

  • Depth-First Search (DFS)
  • Breadth-First Search (BFS)
  • Dijkstra Search
  • Greedy Best-First Search
  • A*
  • D*-Lite
  • Jump Point Search (JPS)

Install

pip install pathfind

Basic Usage

Define a graph to transform graph from a matrix, then find a path from start point to end point. The value in m indicates a cost at that node. Note that the -1 in m represents the cost in that node is infinity, which means this node is not connected to others.

import pathfind

m = [
    [1, 1, 1, 1, 1],
    [1, 2, -1, 1, 1],
    [1, 1, 1, 1, 1],
    [8, 3, 1, 1, 1],
    [1, 1, 1, 1, 1],
]
graph = pathfind.transform.matrix2graph(m)
path = pathfind.find(graph, start="4,0", end="0,0")
# ['4,0', '4,1', '3,1', '2,1', '2,0', '1,0', '0,0']

graph.show(trace=path)
drawing

Finder can be changed by passing a string method ("a*", "bfs", "greedy", "dijkstra", "dfs", "d*lite", "jps").

path = pathfind.find(graph, start="2,2", end="0,2", method="bfs")
# ['2,2', '2,1', '1,1', '0,1', '0,2']

graph.show(trace=path)
drawing

Graph setup

Another way to define a graph is to config the edge by give [node1's name, node2's name, cost] pairs.

import pathfind

conf = [
    # [node1's name, node2's name, weight, *back_weight]
    ["n1", "n2", 0.1],
    ["n1", "n3", 0.2],
    ["n2", "n3", 0.3]
]
graph = pathfind.Graph(conf)
graph.show()
drawing

Or you can set edge's and node's details by following way:

import pathfind

my_n0 = pathfind.Node(name="my_n0")  # node name set to "my_n0"
auto_name = pathfind.Node()  # node name automatically set to "n0"
n2 = "n2"  # pass a string to represent node name
e0 = pathfind.Edge(node1=my_n0, node2=auto_name, weight=0.2)
e1 = pathfind.Edge(node1=my_n0, node2=n2, weight=0.1)
e2 = pathfind.Edge(auto_name, n2, weight=0)

g = pathfind.Graph()
g.add_edges([e0, e1, e2])
g.show()
g.edges
"""
{'my_n0:n0': my_n0:n0, 'my_n0:n2': my_n0:n2, 'n0:n2': n0:n2}
"""
drawing

A diagonal grid graph can be generated by following way:

import pathfind

m = [
    [1, 1, 1, 1],
    [1, 1, 1, 1],
    [1, 1, 1, 1],
]
graph = pathfind.transform.matrix2graph(m, diagonal=True)
path = pathfind.find(graph, start="0,0", end="2,3")
# ['0,0', '1,1', '2,2', '2,3']

graph.show(trace=path)
drawing

More examples

More examples and usages can be found in test

Release files for pathfind 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pathfind 0.1.2
File Size Uploaded
pathfind-0.1.2.tar.gz 19.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pathfind 0.1.2
File Interpreter ABI Platform
pathfind-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 39.4 kB

Release files / pathfind-0.1.2.tar.gz

Download URL pathfind-0.1.2.tar.gz
Size 19.0 kB
Tags Source
SHA-256 checksum
How to use checksums
fdbf5d822906b5939cd1eb036f99a6559d1dec7bb009985f6f936aea9816ada2
BLAKE2b-256 checksum
How to use checksums
7acba32ce22f38b7e21ec95dac3eef79cde472c98a6f8b4cd953e1bb4f3656fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.6

Release files / pathfind-0.1.2-py3-none-any.whl

Download URL pathfind-0.1.2-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95213d0e50c123245a223439ac93a84fd22a80c4c9254040b183b71b7ebd6019
BLAKE2b-256 checksum
How to use checksums
3ef08da3ba180886626adbd058508ef87b50d37a384fe8878a18a5d226e6591b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page