没过样例

B3623 枚举排列(递归实现排列型枚举)

Miracle_InDream @ 2023-11-19 14:00:36

#include<bits/stdc++.h>
using namespace std;
int n,k;
int mp[15],a[15];
bool vis[15];
void dfs(int m)
{
    if(m==k)
    {
        for(int i=1;i<=m;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i]==0)
        {
            a[m]=mp[i];
            vis[i]=1;
            dfs(m+1);
            vis[i]=0;
            a[m]=0;
        }
    }
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        mp[i]=i;
    }
    memset(vis,0,sizeof(vis));
    dfs(1);
    return 0;
}

by ilibilib @ 2023-11-19 14:08:58

@shooting__star

要dfs到k+1,改一下就AC了。


#include<bits/stdc++.h>
using namespace std;
int n,k;
int mp[15],a[15];
bool vis[15];
void dfs(int m)
{
    if(m==k+1)
    {
        for(int i=1;i<m;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i]==0)
        {
            a[m]=mp[i];
            vis[i]=1;
            dfs(m+1);
            vis[i]=0;
            a[m]=0;
        }
    }
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        mp[i]=i;
    }
    memset(vis,0,sizeof(vis));
    dfs(1);
    return 0;
}

by 511_Juruo_wyk @ 2023-11-19 14:12:23

@shooting__star 代码需要改两出,已经注释出来了


by 511_Juruo_wyk @ 2023-11-19 14:12:43

#include<bits/stdc++.h>
using namespace std;
int n,k;
int mp[15],a[15];
bool vis[15];
void dfs(int m)
{
    if(m>k)//应该是m>k,不然最后一个数就没取到 
    {
        for(int i=1;i<=k;i++)//这里要写i<=k或者i<m,因为m要比k多1 
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i]==0)
        {
            a[m]=mp[i];
            vis[i]=1;
            dfs(m+1);
            vis[i]=0;
            a[m]=0;
        }
    }
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        mp[i]=i;
    }
    memset(vis,0,sizeof(vis));
    dfs(1);
    return 0;
}

|