IDDFS アルゴリズムは、隣接行列を使用してグラフの最短経路を見つけます。ソリューションの深さを示しています (これは、開始点から終了点までのポイントの量であると理解しています)。
これらのポイントを配列で取得したいと思います。
例:
解が深さ 5 で見つかったとしましょう。そのため、点を持つ配列が必要です: {0,2,3,4,6}。
深さ 3: 配列 {1,2,3}。
C++ のアルゴリズムは次のとおり
です。
int DLS(int node, int goal, int depth,int adj[9][9])
{
int i,x;
if ( depth >= 0 )
{
if ( node == goal )
return node;
for(i=0;i<nodes;i++)
{
if(adj[node][i] == 1)
{
child = i;
x = DLS(child, goal, depth-1,adj);
if(x == goal)
return goal;
}
}
}
return 0;
}
int IDDFS(int root,int goal,int adj[9][9])
{
depth = 0;
solution = 0;
while(solution <= 0 && depth < nodes)
{
solution = DLS(root, goal, depth,adj);
depth++;
}
if(depth == nodes)
return inf;
return depth-1;
}
int main()
{
int i,u,v,source,goal;
int adj[9][9] = {{0,1,0,1,0,0,0,0,0},
{1,0,1,0,1,0,0,0,0},
{0,1,0,0,0,1,0,0,0},
{1,0,0,0,1,0,1,0,0},
{0,1,0,1,0,1,0,1,0},
{0,0,1,0,1,0,0,0,1},
{0,0,0,1,0,0,0,1,0},
{0,0,0,0,1,0,1,0,1},
{0,0,0,0,0,1,0,1,0}
};
nodes=9;
edges=12;
source=0;
goal=8;
depth = IDDFS(source,goal,adj);
if(depth == inf)printf("No solution Exist\n");
else printf("Solution Found in depth limit ( %d ).\n",depth);
system("PAUSE");
return 0;
}
他のパス検索アルゴリズムの代わりに IDDFS を使用している理由は、正確な長さのパスを検索するために深さを指定された数に変更したいからです (ただし、それが機能するかどうかはわかりません)。
隣接行列を使用して指定された長さのパスを見つけるための他のアルゴリズムを誰かが提案する場合は、それについて教えてください。