如何使用递归将DFS算法转换为具有正常迭代的算法?

时间:2014-03-03 08:27:44

标签: algorithm recursion

我已经通过使用递归成功实现了DFS(深度优先搜索)算法,但我不知道如何使用普通迭代。

以下是我的递归调用代码。

data[1000][1000];
mark[1000][1000];// The array marks vertex visited
void dfs(int x, int y, int label){

    if(x < 0 || x == SIZE)
        return;
    if(y < 0 || y == SIZE)
        return;

    if(data[x][y] == 0 || mark[x][y] != 0)
        return;

    mark[x][y] = label;

    dfs(x + 1, y, label);
    dfs(x, y + 1, label);
    dfs(x - 1, y, label);
    dfs(x, y - 1, label);
}

请帮我将递归转换为for或while之类的循环。 提前谢谢大家。

1 个答案:

答案 0 :(得分:3)

您可以创建一个新结构并使用堆栈。 make_tuple(int x,int y,int label)返回元组类型。

typedef struct
{
    int x,y,label;
} tuple;

stack<tuple > s;
s.push(make_tuple(initialx,initialy,initiallabel));

while(!s.empty())
{
    tuple p = s.top();
    s.pop();
    int x = p.x;
    int y = p.y;
    int label = p.label;


    if(x < 0 || x == SIZE)
        continue;
    if(y < 0 || y == SIZE)
        continue;
    if(data[x][y] == 0 || mark[x][y] != 0)
        continue;
    mark[x][y] = label;
    s.push(make_tuple(x + 1, y, label));
    s.push(make_tuple(x, y + 1, label));
    s.push(make_tuple(x - 1, y, label));
    s.push(make_tuple(x, y - 1, label));
}