# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها >  درخواست راهنمائی برای الگوریتم و برنامه ساخت مربع جادوئی

## havakili

با سلام به همه دوستان

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

----------


## golbafan

لطفا درخواست پروژه های درسی نکنید
تاپیک حذف میشود

#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

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


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

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

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


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

----------


## havakili

به هر حال ممنون جناب گلبافان ، شما هم خیلی لطف کردید

 :لبخند:

----------


## havakili

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

----------


## golbafan

ای بابا...
شما اول بگین چرا این مطلب براتون مهمه بعد من راهشو براتون نشون میدم

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

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

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

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

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


موفق باشید

----------

