I am interested in determining all of the possible "continuous" paths of an NxN matrix in R and returning their result. By "continuous" I mean that we can travel without lifting up your pencil/digit. That is, we can move up, down, left, right, or diagonally.
To make this concrete, let's use a 3x3 matrix example:
mat_3x3 <- matrix(LETTERS[1:9], ncol = 3, byrow = TRUE)
mat_3x3
# [,1] [,2] [,3]
# [1,] "A" "B" "C"
# [2,] "D" "E" "F"
# [3,] "G" "H" "I"
This means we have the following valid and invalid paths:
Some considerations:
- The start position does not need to be position
A(1, 1). - We cannot "double-back" or touch the same cell multiple times.
- Short paths are possible (e.g.
A -> B -> Cis a valid path; likewise,A -> E -> I) -- that is, we do not need to pass through all the nodes.
If there is a package or concept that facilitates, please advise (most of the graph traversal packages I have seen are more "graph" than "matrix"). I'd imagine dynamic programming or recursion is probably of use here, but I am not sure how to start.
I believe the answer to the 2X2 case could be 60 per the following solution for one cell with paths = 15; 15 * 4 = 60:
However, things escalate quickly for a 3x3, 4x4, case...no longer just corners, the addition of "center" squares, etc...
If we think about this problem as more of a graph or network, we have the following for the 3X3 case:
Why though?
I am just genuinely interested in this problem and find it fascinating. I'd like to understand how to program it in R, but I'd consider other answers if they exist (then perhaps translate them to R). It started as a thought experiment thinking about a "game" where you you slide your finger on a touch screen to create words from the string of characters. Rather than minimum cost, we'd like to maximize score -- using a Z scores more points than an E like in Scrabble, etc. But I suppose this has interesting applications in social networks, graph theory, transportation optimization, and other domains.


