【发布时间】:2016-09-06 23:32:00
【问题描述】:
所以我有一个循环,在每次迭代中,我想以不同的顺序遍历整个循环,直到满足结束条件。
在每次迭代期间,控制我想要通过循环的顺序的变量会发生变化。
例如,
while (endCondition == false){
Item1;
Item2;
Item3;
}
第一次进入循环时,我希望它按照 1、2、3 的顺序进行。第二次:2,1,3... 以此类推(只是手头不知道第n次迭代的顺序)
有没有办法实现这一点?欢迎所有建议!
编辑:我知道上一次迭代结束时的迭代顺序。我想知道如何执行该排列。
Item1、Item2、Item3 是将元素压入堆栈的函数。循环一直运行,直到 endCondition 元素被推送。在每次迭代结束时,顶部元素用作参考,以便在下一次迭代中使用上述函数再添加 3 个元素。我想优先考虑推入堆栈的元素以更快地到达 endCondition。 而优先级的顺序将取决于顶部元素与 endCondition 的接近程度。
while(maze[currPos_y][currPos_x] != DESTINATION){
int flag = 0;
//Adding all open spaces around current position to stack
if(maze[currPos_y + 1][currPos_x] == OPEN){
path.push(currPos_y+1, currPos_x);
flag++;
}
if(maze[currPos_y][currPos_x + 1] == OPEN){
path.push(currPos_y, currPos_x + 1);
flag++;
}
if(maze[currPos_y][currPos_x - 1] == OPEN){
path.push(currPos_y,currPos_x - 1);
flag++;
}
if(maze[currPos_y - 1][currPos_x] == OPEN){
path.push(currPos_y - 1, currPos_x);
flag++;
}
//If path is blocked
if (flag <= 1){
path.pop();
}
currPos_x = path.top_x();
currPos_y = path.top_y();
}
path 是我实现的堆栈。堆栈没有问题,工作正常。
如您所见,如果二维数组maze 的大小很大,则此代码将运行很长时间。所以我想通过DESTINATION 的方向让它更快。所以最接近DESTINATION的位置会被推到最后,以便最先访问。
【问题讨论】:
-
你的意思是你想随机排列循环中的 n 项吗?或者你的意思是你知道迭代开始时的顺序是什么,只是想知道如何执行排列?
-
@RobertPrévost 我知道每次迭代开始时的顺序是什么,并且想知道如何执行排列。我将编辑问题
-
如果我对你的理解正确,你可能想看看
std::next_permutation -
排列是如何描述的?
-
@Yakk 我已经编辑了这个问题,提供了关于我希望完成的更多细节。希望有帮助