作为计算机小白 博客内容暂为学习总结 **仅供读者参考**
a题时用到了全排列,不会写,就学了一种 **递归法全排列**
模仿深搜的递归标记思想,每获得一种排列方式,存入一种方式,由于是全排列>﹏<时间复杂度较高。
#include <stdio.h>
int base[15],mark[15],cache[15],res[int(1e7)][15]; //base存储要排列的元素,mark标记该位元素是否使用,
//cache缓存当前未完成排列,res存储结果
int number,ans; //number表示要排列的元素数目,ans表示结果数目
void dfs(int cache_index) //参数为cache当前下标,从1开始为cache各位赋值
{
for (int i=1;i<=number;i++)
{
if (mark[i]==1)
continue;
cache[cache_index]=base[i];
if (cache_index==number)
{
ans++;
for (int j=1;j<=number;j++)
res[ans][j]=cache[j];
return;
}
mark[i]=1;
dfs(cache_index+1);
mark[i]=0;
}
return ;
}
int main()
{
while(~scanf("%d",&base[++number]));
number--;
dfs(1);
for (int i=1;i<=ans;i++)
{
for (int j=1;j<=number;j++)
printf("%d ",res[i][j]);
printf("\n");
}
return 0;
}
莓啦...