Algorithm 使用IDDFS创建路径数组

Algorithm 使用IDDFS创建路径数组,algorithm,path-finding,Algorithm,Path Finding,我的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; 如果

我的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;
如果(深度>=0)
{
如果(节点==目标)
返回节点;

对于(i=0;i从寻路算法中获取实际路径的想法是使用
map:V->V
,这样键就是一个顶点,值就是用来发现键的顶点(源不是键,或者是一个具有
null
值的键,因为它不是从任何顶点发现的)

寻路算法将在地图运行时修改它,当它完成时-您可以通过从表中迭代读取来获取路径-从目标开始-一直到源-然后以相反的顺序获取路径

在:每次发现新顶点(即
key
)时,都会插入
(key,value)
对。请注意,如果
key
已经是地图中的一个键,则应跳过此分支。
一旦你完成了对某条路径的探索,并“关闭”了一个顶点,你就需要把它从列表中去掉,但是-有时候你可以优化算法并跳过这一部分(这会使分支因子变小)

由于IDDFS实际上是以迭代方式执行DFS,因此您可以遵循相同的逻辑,每次进行新的DFS迭代时—为了获得更高的深度,您可以清除旧映射,然后从头开始新映射


其他寻路算法有、和。请注意,最后2个算法也适用于加权图。所有这些算法都可以在达到某个深度时终止,就像在IDDFS中达到某个深度时终止DFS一样。

但我希望不是最短路径,而是更长的路径。我将给算法指定的路径长度,然后我不知道如何使用这些算法来解决这个问题。
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;
}