سلام
این الگوریتم انطوریه که می خواهیم 8 قلعه را در یک صفحه شطرنج طوری قرار بدهیم که همدیگر را تهدید نکنند باید این الگوریتم تمام حالات ممکن را در به وسیله ماتریس به خروجی منتقل کند
سلام
این الگوریتم انطوریه که می خواهیم 8 قلعه را در یک صفحه شطرنج طوری قرار بدهیم که همدیگر را تهدید نکنند باید این الگوریتم تمام حالات ممکن را در به وسیله ماتریس به خروجی منتقل کند
سلام
برای کی می خواهی من این برنامه را به زبان c دارم ولی باید خروجی اش را تغییر دهم .
بگو برای کی می خواهی ؟
لطف کنید به زبان c آن را بفرستید من هم لازم دارم با تشکر فراوان
تمام ۴۰۳۲۰ نوع مختلف را به خروجی منتقل کند؟نوشته شده توسط cs_mania
سلام این برنامه کلیه حالت ها را مختصاتشان را می دهد یعنی 8 مختصات در خروجی چاپ می کند که 8 قلعه می تونه قرار بگیرد .
#include<stdio.h>
#include<conio.h>
#include<math.h>
int Cross(int a,int b,int d){
if (a==b || abs(a-b)==d)
return 0;
else
return 1;
}
void main (void){
int a,b,c,d,e,f,g,h,count=0;
clrscr();
for(a=1;a<=8;a++)
for(b=1;b<=8;b++)
if(Cross(a,b,1))
for(c=1;c<=8;C++)
if(Cross(c,b,1) && Cross(c,a,2))
for(d=1;d<=8;d++)
if(Cross(d,c,1) && Cross(d,b,2) && Cross(d,a,3))
for(e=1;e<=8;e++)
if(Cross(e,d,1) && Cross(e,c,2) && Cross(e,b,3) && Cross(e,a,4))
for(f=1;f<=8;f++)
if(Cross(f,e,1) && Cross(f,d,2) && Cross(f,c,3) && Cross(f,b,4) && Cross(f,a,5))
for(g=1;g<=8;g++)
if(Cross(g,f,1) && Cross(g,e,2) && Cross(g,d,3) && Cross(g,c,4) && Cross(g,b,5) && Cross(g,a,6))
for(h=1;h<=8;h++)
if(Cross(h,g,1) && Cross(h,f,2) && Cross(h,e,3) && Cross(h,d,4) && Cross(h,c,5) && Cross(h,b,6) && Cross(h,a,7)){
count++;
printf("%d,%d\n",1,a);
printf("%d,%d\n",2,b);
printf("%d,%d\n",3,c);
printf("%d,%d\n",4,d);
printf("%d,%d\n",5,e);
printf("%d,%d\n",6,f);
printf("%d,%d\n",7,g);
printf("%d,%d\n\n",8,h);
getch();
}
printf("%d",count);
}
در این برنامه 92 حالت است که قلعه ها می تونند قرار بگیرند .
ممنون از جوابتون خیلی کمکم کرد
اما یه سوال چه طوری میشه تمام حالات را بررسی کنه همین طور با recursive به صورت بازگشتی هم میشه نوشتش یا نه ؟
سلامنوشته شده توسط cs_mania
بله این برنامه را هم می توان به صورت بازگشتی نوشت .
اما منظورت چیه که چه طوری می شه تمام حالات را بررسی کنه ؟ (یعنی توضیح برنامه ؟!)
نه یعنی تمام !8 حالات را نشان بدهد چون در این حالت 92 تا بیشتر جواب نمیده
سلامنوشته شده توسط cs_mania
تمام !8 را ؟! من اولین باری است که می شنوم . لطفا توضیح بیشتر بدهید.
۴۰۳۲۰=!۸نوشته شده توسط gm.sara
دفعه اوّل نیست که بیان شده، در پست قبلیم نوشته شده بود.
رخها را باید طوری چید که در هر ردیف افقی و عمودی فقط یک رخ قرار داشته باشه.
XOOOOOOO
OXOOOOOO
OOXOOOOO
OOOXOOOO
OOOOXOOO
OOOOOXOO
OOOOOOXO
OOOOOOOX
حالا این ۸ نوع را میشه در !۸ روش مختلف جایشان را با هم عوض کرد.
سلام
بابا اوون 92 مال یه چیز دیگه است :) 92 حالت مال 8 وزیره . این یکی فرق فوکوله. تعداد جوابهای 8 رخ 8! یا همون 40320 حالت میشه. سورس 8 وزیر که مثل زیبیل توی این انجمن ریخته و فقط خواجه حافظ شیرازی اوون رو بلد نیست. فقط کافیه توی همون برنامه 8 وزیر قسمت چک کردن تهدید قطری رو بردارید. چیزی که بدست میاد میشه برنامه 8 رخ.
ممنون علی
منتها این سوال را خیل راحتر از ۸ وزیر میشه حل کرد، بر استفاده از recusion زیادی تاکید میشه، وقتش رسیده که یک روش تمیزتر و بهتر اراعه داده بشه،
برنامه ۸ وزیر احتیاجی به recursion نداره، ولی همه مثل گوسفند عادت دارن که فقط از یک روش استفاده کنند.
اینکه یک نفر سعی کرده به این سوال بدون استفاده از recursion جواب بده جایه تشویق داره.
سلامنوشته شده توسط اَرژنگ
من از شما ممنون هستم . بله من برنامه را با 8 وزیر اشتباه گرفته بودم الان متوجه اشتباهم شدم .دوست عزیزمان seyedof درست گفتند اگر قسمت چک تهدید قطری برداشته شود فکر می کنم برنامه کاملا درست می شود .
و شما دوست عزیز منظورتان از recursion چیه ؟ ( همان recursive ؟!)
راستی البته ببخشید اگر ناراحت نمی شوید : واژه گوسفند فکر کنم زیاد مناسب نباشد به هر حال تعهد ما این است که به کسی توهین نکنیم . (با معذرت فراوان )
از راهنمایی تمام شما دوستان ممنون هستم .
recusrion = برگشتی،نوشته شده توسط gm.sara
recursiveِ = (صفت) برگشتنی.
من از گوسفند برایه توهین استفاده نکردم، بیچاره گوسفند! همیشه از بقیه پیروی میکنه و آخرش هم ....
من داشتم این بحث را تعقیب میکردم، جوابه استاندارد همانیه که مدیره بخش فمودند، و کاملاً هم درست هست، از نظره جوابی که نمره را میگره و ابداً هیچ حرفی درش نیست.
ولی از نظره ابتکاری، جوابی که شما داشتین پیش میرفتین ، جوابی که کمتر کسی بهش فکر میکنه چه اینکه حتّا بخواد الگریتمش را بیان کند.
روشهایی که از recursion استفاده میکنند ( یعنی recursiveِ هستند)، ساختمانی نیستند.
ساده ترین مثال این گونه الگریتمها، permutation (ن تا جیز را در چند روش میشه جایاشان را با هم عوض کرد، مثال (ا،ب،ث)،(ا،ث،ب)،(ب،ا،ث)،(ب،ث ا)،(ث،ا،ب)،(ث،ب،ا) )، در تمام کتابهایه الگریتمی که دیدم فقط از روش بازگشتی استفاده میشه و حتّا به اینکه میشه این سوال را به روش iterative حل کرد هیچ اشارهای نیست!
یکی از برترییهایه روش iterative بر روش recursion اینه که جواب را در یک مرحله میده ولی recuriveِ باید تمام مرحلهها را تا مرحله اوّل پیش بره!
در ضمن اگر کسی فکر میکه گوسفند بیاحترامیه، اون گوسفند هم خودمم ( با عرض پوزش از گوسفند).
آخرین ویرایش به وسیله اَرژنگ : دوشنبه 26 دی 1384 در 02:47 صبح
سلامنوشته شده توسط اَرژنگ
من قصد بی احترامی نداشتم . اصلا حرفم را پس می گیرم شما من را متقاعد کردید . معذرت می خوام .
در مورد برنامه ام توضیحی که باید بدهم اینه که این برنامه بیشتر به الگوریتم کار کمک می کنه فکرمی کنم کسی که نداند منظور سوال چیه با خواندن این برنامه متوجه شه که اصلا چه طوری باید فکر کرد ؟ مثل راه حل می ماند . درسته که برنامه خروجی می ده اسمن برنامه است ولی بیشتر شبیه الگوریتم کار است .
ممنون از راهنمایی شما
سلام
خیلی از برنامه های بازگشتی رو میشه به روشهای تکراری یا iterative تبدیل کرد ولیکن در اکثر موارد که جواب بازگشتی بسیار کوتاه و مختصر است روش تکراری معادل آن پیچیده و طولاتر خواهد بود. البته روشهای بازگشتی مشکل overflow stack رو هم دارند.
ممنون علی
پس همونطوریی که مدیر بخش فرمودند، الگریتم ۸ وزیر را تغییر بدید جوابتان را دارید.نوشته شده توسط gm.sara
اینکه recursion نوشتن الگریتم را سادهتر میکند هم کاملاً درست هست.