PDA

View Full Version : درخواست راهنمائی برای الگوریتم و برنامه ساخت مربع جادوئی



havakili
پنج شنبه 24 اردیبهشت 1394, 22:20 عصر
با سلام به همه دوستان

ما می خواهیم یه الگوریتمی پیاده کنیم که بتونیم برای یه ماتریس 100 در 100 تمامی حالاتی که درآن مربع جادوئی وجود دارد رو بیرون بکشیم و این واسه ما خیلی خیلی حیاتی است
برنامه ما تولید تمامی مربع های جادوئی در رنج 3 تا 100 هست یعنی برای همه این سایز ها باید مربع های جادوئی رو خیلی زود استخراج کنیم
از دوستان و سروران گرامی که واقعا میتونند در این زمینه ما رو کمک کنند ، عاجزانه خواهشمندم دریغ نکنند واقعا مسئله حیاتی هست
واسه ما دقت الگوریتم و سرعت در استخراج مربع های جادوئی خیلی مهمه..........
با تشکر از همه عزیزان

golbafan
پنج شنبه 24 اردیبهشت 1394, 22:34 عصر
لطفا درخواست پروژه های درسی نکنید
تاپیک حذف میشود

#include<conio.h>
#include<iostream.h>
#include<stdio.h>
int a[100][100],n,x,y;
int findx(int x)
{
if (x==1) return n;
return x-1;
}
int findy(int y)
{
if (y==1) return n;
return y-1;
}
void calc(int a[100][100],int n,int x,int y)
{
for(int i=2;i<=n*n;i++){
if(a[findx(x)][findy(y)]==0){
x=findx(x);
y=findy(y);
a[x][y]=i;}
else
{
x++;
a[x][y]=i;
}}}
main()
{
clrscr();
printf("Enter n:");
scanf("%d",&n);
while(n%2==0){
clrscr();
printf("enter n:");
scanf("%d",&n);}
for (int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=0;
int y=n/2+1 , x=1;
a[x][y]=1;
calc(a,n,x,y);
clrscr();
printf("");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("");}
getch();
}

golbafan
یک شنبه 27 اردیبهشت 1394, 10:44 صبح
نکته ای که باید اینجا مطرح کنم اینکه دوستان به هیچ وجه این مسئله درسی یا پروژه دانشگاهی نیست مسئله تخصصی هست دست کم نگیرند مسئله رو و هر کدی رو بدون تست کردن به عنوان پاسخ ارسال نکنید ما خودمون از روش های خیلی بهتری استفاده کردیم و به جواب نرسیدیم لطفا کمک کنید مسئله ما بدست آوردن جواب این مسئله است که خود این جواب ها باعث یک جهش و پیشرفت واسه ملت ایران هست به شوخی نگیرید فقط کمک کنید تا این مسئله حل بشه
ضمناً ما امکانات سخت افزاری اگه لازم باشد رو هم تامین میکنیم
با تشکر

اونقدر ها هم که شما فکر میکنید چیز پیچیده ای نیست
مطمئن باشید گامی در جهت پیشرفت کشور هم نیست...
من بعضی ها رو میشناسم که بدون کامپیوتر هم این مربع رو براحتی ایجاد میکنند !

در ضمن من کدش رو براتون فرستادم. شما اصلا اجرا کردی ببینی چی میشه؟

یک سورس کامل به همراه فایل اجرایی برات میزارم
با کامپیوترهای تحت هندل هم اجرا میشه :قهقهه:


اینم تصویرش: از درجه 3 تا درجه 1000 (شایدم بیشتر!) برات تولید میکنه:

131340

havakili
دوشنبه 28 اردیبهشت 1394, 08:25 صبح
به هر حال ممنون جناب گلبافان ، شما هم خیلی لطف کردید

:لبخندساده:

havakili
دوشنبه 28 اردیبهشت 1394, 08:29 صبح
شما که اینهمه لطف کردید میشه همین کد رو که حتما خودتون نوشید رو جور طراحی کنید که همه حالت ها رو به ازای هر N بدست بیاره
مثلا برای N =4 تعداد حالات مربع جادوئی 7040 حالت هستش و برای N=5 تعداد حالات 130 میلیون حالت هستش
حال من منتظر پاسخ شخص شما هستم
با تشکر

golbafan
دوشنبه 28 اردیبهشت 1394, 09:46 صبح
ای بابا...
شما اول بگین چرا این مطلب براتون مهمه بعد من راهشو براتون نشون میدم

لطفا کامل توضیح بدید و فقط به این موضوع اشاره نکنید که گامی مهم در جهت علم مملکت است...

به هر حال طبق تئوری اعداد باید بگم تعداد حالات برای جدول 100*100 اونقدر زیاده که امکان تولیدش با کامپیوترهای امروزی مقدور نیست و حتی با تمام سرورهای دنیا هم اگر همزمان کار کنید نمیتونید تعداد کل حالات رو پیاده سازی کنید

البته الگوریتم و روش تولید موجود هست ولی تولید و ذخیره این موارد امکان پذیر نخواهد بود
برای مثال شما تعداد حالات درجه 4 و 5 رو گفتید. خب منم برای درجه 6 میگم: بیش از 10 به توان 20 حالت!
البته مقادیر دقیق تعداد حالات برای درجات بیشتر از 5 هنوز بدست نیومده (حتی با کامپیوترهای امروزی)

ذخیره سازی و بدست آوردن همین مورد نیازمند داشتن یک "سرور بلید" بسیار نیرومنده و جالبه بدونبد وقتی این درجه به 9 میرسه تعداد حالات اونقدر زیاده که از توان جمیع سیستم های امروزی (از لحاظ زمان تولید و ذخیره سازی) خارج خواهد شد

این کار مثل اینه که شما بگید من سیستمی رو میخوام که بتونه از 1 تا بینهایت رو برام بشماره
مسلما الگوریتم این شمارش چیز سخت و پیچیده ای نیست ولی زمان اتمام کار و فضای ذخیره سازی ای در دنیا نیست که بتونه اینکار رو بکنه


موفق باشید