برنامه ای بنویسید که حرکت اسب را شبیه سازی کند ، به طوری که یک اسب از یک خانه از صفحه شطرنج شروع به حرکت کرده و تمام خانه ها را طی کند به شرط اینکه به هر خانه فقط یک بار برود.
محل شروع اسب را از کاربر می پرسد.
مثال : در شکل ادامه مطلب محل شروع حرکت خانه (1،1) در نظر گرفته شده است . حرکت بعدی اسب خانه (2،3) است که با عدد 2 شماره گذاری شده است . و عدد 3 برای حرکت سوم می باشد
صفحه شطرنج 8*8 است پس باید اسب 64 حرکت داشته باشد.
در برنامه زیر وقتی محل شروع را خانه های بالایی صفحه شطرنج انتخاب می کنیم سرعت برنامه نسبتا خوب است اما وقتی که خانه های پایینی صفحه را انتخاب می کنیم سرعت برنامه خیلی کُند می شد به طوری وقتی خانه 8 و 8 را محل شروع اسب انتخاب کنیم حل برنامه چند دقیقه طول می کشد.
لطفا شما نیز روی این برنامه کمی فکر کنید
اگر توانستید با الگریتم بهتری این مسئله را حل کنید در وبلاگ قرار دهید و یا مشکل برنامه زیر را حل کنید و ببینید که چه چیزی سرعت برنامه را کم می کند.
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int a[9][9];
void run(int,int,int);
void end(void);
main()
{
int x,y,i=1;
for(int j=1;j<=8;j++)
for(int k=1;k<=8;k++)
a[j][k]=0;
clrscr();
printf("*** program move hours ***\n\n");
printf("\n Enter X : ");
scanf("%d",&x);
printf("\n Enter Y : ");
scanf("%d",&y);
if(x<1 || x>8 || y<1 || y>8)
{
printf("\nError : number between 1 and 8");
getch();
exit(1);
}
a[x][y]=i;
i++;
run(x-2,y-1,i);
run(x-2,y+1,i);
run(x-1,y-2,i);
run(x+1,y-2,i);
run(x-1,y+2,i);
run(x+1,y+2,i);
run(x+2,y-1,i);
run(x+2,y+1,i);
printf("\n Error : I can not end program");
getch();
end();
}
void run(int x,int y,int i)
{
if(x<1 || x>8 || y<1 || y>8)
return;
if(a[x][y]!=0)
return;
a[x][y]=i;
i++;
if(i==65)
end();
run(x-2,y-1,i);
run(x-2,y+1,i);
run(x-1,y-2,i);
run(x+1,y-2,i);
run(x-1,y+2,i);
run(x+1,y+2,i);
run(x+2,y-1,i);
run(x+2,y+1,i);
a[x][y]=0;
}
void end(void)
{
clrscr();
for(int j=1;j<=8;j++)
{
for(int k=1;k<=8;k++)
printf("%d\t",a[j][k]);
printf("\n\n\n\n\n\n");
}
getch();
exit(0);
}
نویسنده برنامه : مهندس
سلام آقا مهندس بسیار عالی بود
با تشکر
برنامه ای بنویسید که حرکت اسب را شبیه سازی کند ، به طوری که یک اسب از یک خانه از صفحه شطرنج شروع به حرکت کرده و تمام خانه ها(68 تایی) را طی کند.مهم نیست هر خانه چند بار تکرار شود.
(لطفاجوابو در بخش نظرا وب سایتم بنویس.تشکر)
برنامه ای بنویسید که حرکت اسب را شبیه سازی کند ، به طوری که یک اسب از یک خانه از صفحه شطرنج شروع به حرکت کرده و تمام خانه ها(68 تایی) را طی کند.مهم نیست هر خانه چند بار تکرار شود.
(به زبان vb6 باشه - حتما)
(لطفاجوابو در بخش نظرا وب سایتم بنویس.تشکر)
مهندس جان اسب به انگلیسی می شه horse نه hours بعدشم برنامه ات اشکال داره همیشه اولین الگوریتمی که به جواب می رسه بهترین نیست.