0

我在我的大学有以下问题:

从0n - 1的整数排列,算法永远运行的最小n是多少?

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v;
    v.push_back(3);
    v.push_back(1);
    v.push_back(0);
    v.push_back(6);
    v.push_back(2);
    v.push_back(7);
    v.push_back(5);
    v.push_back(4);
    int j = 0;
    int i = 0;
    for(i = 0; i < v.size(); i++)
    {
        if(v[i] > i) 
        {
            j = i;
            while( j < v.size() && v[j] >= j )
            {
                j = j + 1;
            }
            int temp = v[i];
            v[i] = v[j];
            v[j] = temp;
            i = 0;
        }

    }
    return 0;
}

我手动找到了排列 {3, 1, 0, 6, 2, 7, 5,4}。如果有人检查我的答案或找到更小的排列,我将不胜感激。

我尝试了很多排列,但不是通过蛮力,而是通过逻辑选择,我认为这是算法循环的最小序列。

4

1 回答 1

1

最小 n 为 6。可能的解决方案:

0 3 4 5 2 1 导致 0 2 4 5 3 1 导致回到 0 3 4 5 2 1

于 2013-04-15T08:10:25.067 回答