たとえば、入力文字列が「ABC」の場合、出力は「ABC、ACB、BAC、BCA、CAB、CBA」になります。
これが私のアプローチです:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void print(char str[],int visited[],int index,char temp[],int len)
{
if(index==len)
{
temp[index]='\0';
printf("\n%s",temp);
return;
}
for(int i=0;i<len;i++)
{
if(!visited[str[i]-'A'])
{
visited[str[i]-'A']=1;
temp[index]=str[i];
print(str,visited,index+1,temp,len);
visited[str[i]-'A']=0;
}
}
}
int main()
{
int visited[20]={0};
char temp[20];
char str[] = "ABCD";
int len=strlen(str);
print(str,visited,0,temp,len);
getch();
return 0;
}
文字の繰り返しを避けるために、訪問済み配列を利用しました。このコードの複雑さはどうなりますか?