Path finding algorithm for arbitrary graphs.
In this project an ant colony is simulated and the goal is to find the most efficient way for n numbers of ants to travel from the entry of the graph to the exit. Each vertex and edge of the graph can only hold one ant at a time.
for compiling run make
$> ./lem-in < path/to/map
a map has the following structure:
number_of_ants
the_rooms
the_links
comments are escaped with #. The source of the graph is marked by ##start and sink is marked by ##end.
Here an example:
$> cat example.map
3
##start
src 2 0
##end
snk 1 4
K 0 1
O 0 2
M 0 3
G 1 1
H 1 2
I 1 3
D 2 1
E 2 2
F 2 3
A 3 1
B 3 2
C 3 3
# links
src-G
src-D
src-A
M-snk
I-snk
F-snk
G-K
E-H
C-F
K-O
O-M
G-H
H-I
D-E
E-F
A-B
B-C
the output will have the following structure (-l option suppresses the input map from being printed to the stdout):
$> ./lem-in -l < example.map
L1-G L2-D
L1-H L2-E L3-D
L1-I L2-F L3-E
L1-snk L2-snk L3-F
L3-snk
to be read as follows:
L[ant_no]-[current_vertex]. One line represents one step. So in the first step ant 1 moves to room G and ant 2 moves to room D. In the second step ant 1 continues to room H, ant 2 to E and ant 3 moves to room D. After step 5 all ants have arrived in snk.