PDA

View Full Version : سوال: چاپ جایگشتهای n شی



Moharram
سه شنبه 11 تیر 1387, 16:51 عصر
سلام

چجور میتونم جایگشتهای n شی رو در خروجی print کنم:
مثال : abc-acb و ....

با تشکر

Moharram
چهارشنبه 12 تیر 1387, 11:20 صبح
خودم از روش بازگشتی زیر استفاده کردم، ولی راستش خیلی پیچیده شد(کار به جاهای باریک کشید مثل استفاده از پشته و ...).
خلاصه اینکه بعضی جاها خودم نفهمیدم چیکار کردم ... :گیج::گیج::گیج:

اگه روش آسونتری دارین لطفا پیشنهاد بدین.




#include "stdio.h"
#include "conio.h"
#include "string.h"
#define N 26

void Jaygasht(int n,int m);
void Push(int data);
int Pop(void);
int used[N];
char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l',' m','n','o','p','q','r','s','t','u','v','w','x','y' ,'z'};
char forPrint[N];
int forPrintPointer;
int Stack[50];
int StackPointer = 0;
int globalNumber=0;

void main(void)
{

int num;
printf("Enter number between 1 to 26:");
scanf("%d",&num);

forPrintPointer = 0;
for(int i=0;i<N;i++)
used[i] = 0;

Jaygasht(num,num);

getch();
}

void Jaygasht(int n,int m)
{
for(int i=0;i<n;i++)
{
if(used[i] == 0)
{
if (m == 1)
{
forPrint[forPrintPointer++] = alphabet[i];
forPrint[forPrintPointer++] = '\0';
globalNumber++;
printf("%4d - %s\n",globalNumber,forPrint);
forPrintPointer=0;
break;
}
used[i] = 1;
forPrint[forPrintPointer] = alphabet[i];
Push(forPrintPointer++);
Jaygasht(n,m-1);
forPrintPointer=Pop();
used[i] = 0;
}
}
}

void Push(int data)
{
Stack[StackPointer++] = data;
}
int Pop(void)
{
return Stack[--StackPointer];
}