因此,我有一個循環,並且在每次迭代中,我希望以不同的順序遍歷整個循環,直到滿足結束條件。在每次迭代中以不同順序循環顯示項目列表
在每次迭代中,控制我想要通過循環變化的順序的變量。
例如,
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) –