因此,我有一个循环,并且在每次迭代中,我希望以不同的顺序遍历整个循环,直到满足结束条件。在每次迭代中以不同顺序循环显示项目列表
在每次迭代中,控制我想要通过循环变化的顺序的变量。
例如,
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我知道每次迭代开始时的顺序是什么,并且想知道如何执行排列。我将编辑问题 – Apara
如果我正确理解你,你可能想看看['std :: next_permutation'](http://en.cppreference.com/w/cpp/algorithm/next_permutation) –