내 IDDFS 알고리즘은 인접 행렬을 사용하여 그래프의 최단 경로를 찾습니다. 이것은 솔루션의 깊이를 보여줍니다 (시작 지점에서 끝 지점까지 연결된 지점의 양이라는 것을 알고 있습니다).
이 배열을 배열로 가져오고 싶습니다.IDDFS를 사용하여 경로 배열 만들기
예 :
솔루션은 깊이 5에서 발견되므로 포인트가있는 배열을 원합니다. {0,2,3,4,6}.
깊이 3 : 배열 {1,2,3}.
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;
}
-
(I 거의 그래프와 초보자있어 내가 방문한 점을 다시 방문하는 경우 검색하거나하지는 않지만, 그 알고리즘이 "알고"잘 모르겠어요) : 여기 는 C++의 알고리즘이다
다른 경로 찾기 알고리즘 대신 IDDFS를 사용하는 이유는 정확한 길이의 경로를 찾기 위해 지정된 숫자로 깊이를 변경하고자한다는 것입니다 (그러나 작동하는지 확실하지 않습니다). 누군가가 인접 행렬을 사용하여 지정된 길이의 경로를 찾기위한 다른 알고리즘을 제안하는 경우
, 내가 그것에 대해 알려 주시기 바랍니다.
하지만 최단 경로가 아니지만 길어야합니다. 경로의 지정된 길이의 알고리즘을 제공 할 것이고 나에게 그러한 길이를 찾아야한다. 이 알고리즘을 사용하여이 문제를 해결하는 방법을 모르겠습니다. –