浙大版《資料結構(第2版)》題目集習題2.8 輸出全排列 (20分)
阿新 • • 發佈:2021-01-18
技術標籤:浙大版《資料結構(第2版)》題目集
#include<bits/stdc++.h>
using namespace std;
void swap(int a[],int i,int j)
{
int k,r;
r=a[j];
for(k = j - 1;k>=i;k--)
a[k+1]=a[k];
a[i]=r;
}
void swapback(int a[], int i,int j)
{
int k,r;
r=a[i];
for(k=i+1;k<=j;k++)
a[k- 1]=a[k];
a[j]=r;
}
void printA(int a[],int n)
{
for(int i=0;i<=n;i++)
cout<<a[i];
cout<<'\n';
}
void perm(int a[],int p,int q)
{
if(p==q)
printA(a,q);
else
{
int i;
for(i=p;i<=q;i++)
{
swap(a,p,i);
perm(a,p+1,q);
swapback (a,p,i);
}
}
}
int main()
{
int a[10],n;
cin>>n;
for(int i=0;i<n;i++)
a[i]=i+1;
perm(a,0,n-1);
return 0;
}
我太菜了嚶,上面的這個思路是我目前能稍微理解點的,按照評論區的大神修改了下(在B站上看的講解)。
連結:https://www.bilibili.com/video/BV1dx411S7WR?t=854