我已经通过使用递归成功实现了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之类的循环。 提前谢谢大家。
答案 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));
}