この問題は巡回セールスマン問題から軽減できると思います。したがって、NP困難であるため、問題を最適かつ効率的に解決する多項式の解を見つけることはほとんどありません。
ただし、TSPのヒューリスティックと近似のいくつかを採用することをお勧めします 。問題はそもそもTSPに非常に近いように見えるため、これらもこの問題に適応できると思います。
編集:
最短パスを見つける必要がなく、任意のパスが必要な場合は、訪問先セットを維持する単純なDFSで実行できます。DFSのステップでは、再帰から戻ります。前の正方形に移動します。これにより、すべての正方形へのパスがある場合、ロボットはすべての正方形を確実に探索できます。
DFSの擬似コード:
search(path,visited,current):
visited.add(current)
for each square s adjacent to current:
if (s is an obstacle): //cannot go to a square which is an obstacle
continue
if (s is not in visited): //no point to go to a node that was already visited
path.add(s) //go to s
search(path,visited,current) //recursively visit all squares accesable form s
//step back from s to current, so you can visit the next neighbor of current.
path.add(current)
で呼び出すsearch([source],{},source)
ステップの前に最適化ヒューリスティックを使用できることに注意してくださいfor each
。ヒューリスティックは、ノードの反復順序を並べ替えるだけです。