请谁能解释一下为啥这个排列代码不起作用

Posted

技术标签:

【中文标题】请谁能解释一下为啥这个排列代码不起作用【英文标题】:please can anyone explain me why this permutation code is not working请谁能解释一下为什么这个排列代码不起作用 【发布时间】:2021-05-27 14:00:36 【问题描述】:

请任何人指出我做错了什么这是排列代码,它存储了小向量“vec”的所有可能排列,然后显示它

#include<vector>
using namespace std;
vector <vector<int>> ans;

void permut(vector<int> &vec,int index)
if(index==vec.size())
    ans.push_back(vec);
    return;

for (int i = index ;i<index;i++)
    swap(vec[i],vec[i+1]);
    permut(vec,index+1);
    swap(vec[i],vec[vec.size()]);




int main()
    int n; cin>>n; 
    vector<int> vec(n);
    for(int i = 1;i<=n; i ++)
        vec[i-1]= i;
    

    permut(vec,0);
    for (int j =0 ;j<ans.size();j++)
        for(int k = 0 ; k<vec.size();k++)
            cout<< vec[j]<<endl;
        
    

【问题讨论】:

vec[vec.size()]总是是越界访问。您可以访问的最后一个元素是vec.size() - 1 或使用vec.back() 注意有std::next_permutation Edit 这个问题包含有关什么不起作用的详细信息。我发现代码存在多个问题,包括您的输出循环。 你可以告诉我这段代码的所有错误 -- 你没有使用std::next_permutation -- 这算吗? 【参考方案1】:

我们必须从i = starti = end 运行for 循环,但您正在从i = indexi &lt; index 运行它,这意味着您的循环甚至不会运行一次。

#include<bits/stdc++.h>
using namespace std;

vector <vector<int> > ans;

void permut (vector <int> &vec, int start, int end)
    // base case
    if (start == end)
        ans.push_back(vec);
     else 
        for (int i = start; i <= end; i++)
            swap(vec[i], vec[start]);
            permut(vec, start + 1, end);
            swap(vec[i],vec[start]); //backtrack
        
    
    


int main() 
    int n; 
    cin >> n; 
    vector <int> vec(n);
    for (int i = 0;i < n; i++) 
        vec[i]= i + 1;
    

    permut(vec, 0, n - 1);
    
    for (int j = 0; j < ans.size(); j++)
        for (int k = 0 ; k < vec.size(); k++)
            cout<< ans[j][k];
        
        cout << endl;
    

【讨论】:

以上是关于请谁能解释一下为啥这个排列代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 javascript 字符串代码在 Internet Explorer 7 中不起作用?

为啥在 viewDidLoad 中添加子视图不起作用

谁能解释一下为啥这个 android 布局不工作并且在活动启动后立即使活动崩溃

谁能帮我理解为啥在“后缀”起作用时“前缀”不起作用以及如何解决这个问题?

我正在尝试从 .csv 读取信息并将其放入 C# 中的数组中。谁能告诉我为啥代码不起作用?

为啥这个 PHP 递归函数不起作用