全排列、算法、C语言、递归、求帮忙

12345举例为5个数,按以下顺序排列输出:12、13、14、15123、124、125、132、134、135、142、143、145、152、153、1541234、... 12345 举例为5个数,按以下顺序排列输出:
12、13、14、15
123、124、125、132、134、135、142、143、145、152、153、154
1234、1235、1243、1245、1253、1254、1324、1325......
展开
 我来答
百度网友28b4182
2012-05-15 · TA获得超过7224个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:2242万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int q[1000][2];

void BFS()
{
int front=-1,rear=0;
int i,s,d,ts,td;
q[0][0]=1;
q[0][1]=2;

while(front!=rear)
{
front++;
d=q[front][0];
s=q[front][1];
for(i=1;i<=5;i++)
{
if((1<<i)&s)continue;
ts=s+(1<<i);
td=d*10+i;

printf("%d\n",td);
rear++;
q[rear][0]=td;
q[rear][1]=ts;
}
}
}
int main()
{
BFS();
return 0;
}
追问
大哥,请问要换成abcde怎么改呢。
追答
不好改。

#include
#include
#include

int q[1000][2];
void out(int n)
{
//char o='0';//这个用于输出数字
char o='a'-1;//用于输出字母
if(n>0)
{
out(n/10);
putchar(n%10+o);
}
}
void BFS()
{
int front=-1,rear=0;
int i,s,d,ts,td;
q[0][0]=1;
q[0][1]=2;

while(front!=rear)
{
front++;
d=q[front][0];
s=q[front][1];
for(i=1;i<=5;i++)
{
if((1<<i)&s)continue;
ts=s+(1<<i);
td=d*10+i;

//printf("%d\n",td);
out(td);
puts("");
rear++;
q[rear][0]=td;
q[rear][1]=ts;
}
}
}
int main()
{
BFS();
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式