Moharram
سه شنبه 11 تیر 1387, 17:51 عصر
سلام
چجور میتونم جایگشتهای n شی رو در خروجی print کنم:
مثال : abc-acb و ....
با تشکر
Moharram
چهارشنبه 12 تیر 1387, 12: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];
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.