循環と再帰を回避する有向グラフ。美しい挑戦。コードには多くの改善が必要ですが、午前 1 時なので、自宅に Excel をインストールする必要がありました :/
データは A1:B9 の範囲にあると想定しています。解決策は Immediate Window に出力されます (書式は自分で作成します)。
Option Explicit
Sub EveningFun()
Dim rCell As Range
Dim rRng As Range
Dim goal As String
Dim availablePaths(1 To 9) As Boolean
Dim i As Integer
For i = 1 To 9
availablePaths(i) = True
Next i
Set rRng = Sheet1.Range("A1:A9")
For Each rCell In rRng.Cells
goal = rCell.value
Call RecursiveFun(goal, rCell.Offset(0, 1).value, goal, availablePaths)
Next rCell
End Sub
Sub RecursiveFun(goal As String, nextElement As String, path As String, availablePaths() As Boolean)
Dim rCell As Range
Dim rRng As Range
Set rRng = Sheet1.Range("A1:A9")
For Each rCell In rRng.Cells
If goal = nextElement Then
'Debug.Print path & nextElement
Range("D" & Rows.Count).End(xlUp).Cells.Offset(1, 0) = path & nextElement
Exit Sub
End If
If nextElement = rCell.value And availablePaths(rCell.Row) Then
Dim onePathLess(1 To 9) As Boolean
Call CopyArrays(availablePaths(), onePathLess())
'some key place, we have to avoid cycles
onePathLess(rCell.Row) = False
Call RecursiveFun(goal, rCell.Offset(0, 1).value, path & nextElement, onePathLess())
End If
Next rCell
End Sub
Sub CopyArrays(source() As Boolean, target() As Boolean)
Dim i As Integer
For i = 1 To 9
target(i) = source(i)
Next i
End Sub
非常に素晴らしい仕事の場合は +4 ですが、挑戦しない場合は -3 です。