一个算法有关问题

一个算法问题用户输入一个不重复字符串,编写程序,打印出这个字符串的全排列情况比如:输入“123”,则打印出“1

一个算法问题
用户输入一个不重复字符串,
编写程序,打印出这个字符串的全排列情况
比如:输入“123”,则打印出“123”,“132”;“213”;“321”;“231”;“312”
要求,用递归方法编写,c语言。

这个是一个java的题目,用java很容易就编出来了,但是我刚学c不久,想把它用c编出来却老是出错,请各位帮忙   哦。


[解决办法]
#include <stdio.h>
#define n 4 /*求1-n的所有排列*/
int a[n],d[n],e[n];
void main()
{
int i,q,p,k,r,total;
a[1]=1;
for(i=2;i <=n;i++)
{
a[i]=i;
d[i]=i;
e[i]=-1;
}
total=0;
s2:
q=0;
for(i=1;i <=n;i++)printf( "%d ",a[i]);
printf( "\n ");
total+=1;
for(k=n;k> =2;k--)
{
d[k]+=e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{e[k]=1;q++;}
else {
p+=q;
r=a[p];
a[p]=a[p+1];
a[p+1]=r;
goto s2;
}
}
printf( "total= %d\n ",total);
}

[解决办法]
#include <stdio.h>

#define MAX 10
int used[MAX];
int result[MAX];
int N;

void print(){
int i;
for(i = 0; i < N; i++)
printf( "%d ", result[i]);
printf( "\n ");
}
void proc(int step){
int i;
if(step == N)
print();
else{
for(i = 0; i < N; i++){
if(!used[i]){
used[i] = 1;
result[step] = i + 1;
proc(step + 1);
used[i] = 0;
}
}
}
}

main(){
scanf( "%d ", &N);
proc(0);
}

[解决办法]
改一下上面的

#include <stdio.h>

#define MAX 20
int used[MAX];
int result[MAX];
int str[MAX];
int len;

void print(){
int i;
for(i = 0; i < len; i++)
printf( "%d ", result[i]);
printf( "\n ");
}
void proc(int step){
int i;
if(step == len)
print();
else{
for(i = 0; i < len; i++){
if(!used[i]){
used[i] = 1;
result[step] = str[i];
proc(step + 1);
used[i] = 0;
}
}
}
}

main(){
gets(str);
len=strlen(str);
proc(0);
}
[解决办法]
不重复字符串?