سلام
ممنون میشم اگه کسی بلده کمکم کنه لطفا به زبان c باشه البته اگه شبه کد هم باشه مشکلی نیست البته حرکت اسب باید از هر خونه فقط یک بار رد شه 8 وزیر هم که توضیح نمیخواد
اگه کمک کنید ممنون میشم
Printable View
سلام
ممنون میشم اگه کسی بلده کمکم کنه لطفا به زبان c باشه البته اگه شبه کد هم باشه مشکلی نیست البته حرکت اسب باید از هر خونه فقط یک بار رد شه 8 وزیر هم که توضیح نمیخواد
اگه کمک کنید ممنون میشم
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامۀ حرکت اسب توی این لینک شبه کدش هست. به روش Backtracking حل شده:کد:type chess_board is array (1..n,1..n) of integer;
procedure knight (board : in out chess_board;
x,y,move : in out integer;
ok : in out boolean) is
w, z : integer;
begin
if move = n^2+1 then
ok := ( (x,y) = (1,1) );
elsif board(x,y) /= 0 then
ok := false;
else
board(x,y) := move;
loop
(w,z) := Next position from (x,y);
knight(board, w, z, move+1, ok );
exit when (ok or No moves remain);
end loop;
if not ok then
board ( x,y ) :=0; -- Backtracking
end if;
end if;
end knight;
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
//8vazir
#include <stdio.h>
#include <conio.h>
/*-----------------*/
int aray[8][8]={0},rp=1,j_o[8]={0},Vazir_no,j,Ok,Ok2=1,R1=0,Ans=1,X=0;
void DrawChes(void);
void Tiker(void);
void DrawData(void);
void GoBack(void);
/*-----------------*/
void main(void){
int k,l;
textbackground(1);
clrscr();
Vazir_no=0;
j=-1;
while(Ok2==1){
Ok=1;
for( ;j<8&&Ok==1;j++){
if(aray[Vazir_no][j]==0){
Tiker();
Ok=0;
j_o[Vazir_no]=j+1;
Vazir_no++;
if(Vazir_no==8){
DrawChes();
DrawData();
getch();
if(rp>25){
rp=1;
X++;
}
gotoxy(X*12+19,rp++);
textbackground(3); textcolor(0);
cprintf("%2d:",Ans++);
textbackground(3); textcolor(1);
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if(aray[k][l]>49)cprintf("%1d",l+1);
}
j=-1;
}
else if (j>7){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if( aray[k][l]==Vazir_no || aray[k][l]==(50+Vazir_no-1) )
aray[k][l]=0;
GoBack();
}
}
if (j>7){
if(j_o[Vazir_no-1]>7){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if(aray[k][l]==Vazir_no||aray[k][l]==50+Vazir_no-1)
aray[k][l]=0;
}
GoBack();
}
}
}
/*----------------------*/
void GoBack(void){
int register k,l;
if(j>=7/*&&j<9*/&&Vazir_no>0){
for(k=0;k<8;k++)
for(l=0;l<8;l++)
if( aray[k][l]==Vazir_no || aray[k][l]==(50+Vazir_no-1) )
aray[k][l]=0;
j=j_o[Vazir_no-1];
Vazir_no--;
Ok=1;
}
else{
Ok2=0;
}
}
/*----------------------*/
void Tiker(void){
int k;
aray[Vazir_no][j]=50+Vazir_no;
for(k=0;k<8;k++) if(aray[Vazir_no][k]==0)aray[Vazir_no][k]=Vazir_no+1;
for(k=0;k<9;k++) if(aray[k][j]==0)aray[k][j]=Vazir_no+1;
for(k=0;k<8;k++)
if( (Vazir_no+k)<8 && (j+k)<8 && aray[Vazir_no+k][j+k]==0 )
aray[Vazir_no+k][j+k]=Vazir_no+1;
for(k=-8;k<8;k++)
if( (Vazir_no+k)<8 && (j-k)>-1 && aray[Vazir_no+k][j-k]==0 )
aray[Vazir_no+k][j-k]=Vazir_no+1;
}
/*----------------------*/
void DrawChes(void){
int k,l,m;
for(k=0;k<8;k++){
textbackground(4);
textcolor(14);
gotoxy(2*k+2,1);
cprintf("%c ",'A'+k);
gotoxy(1,k+2);
cprintf("%1d",k+1);
textbackground(9);
for(l=1;l<9;l++){
for(m=1;m<9;m++)
if((l%2&&m%2)|| !(l%2||m%2)){
gotoxy(2*l,m+1);
textbackground(7);
textcolor(7);
if(aray[l-1][m-1]!=0){
textbackground(7);
textcolor(1);
if(aray[l-1][m-1]>20) cprintf("* ");
else cprintf("°°");
}
else{
cprintf("²²");
}
}
else{
gotoxy(2*l,m+1);
textbackground(5);
if(aray[l-1][m-1]!=0){
textbackground(5);
textcolor(15);
if(aray[l-1][m-1]>20) cprintf("* ");
else cprintf("°°");
}
else{
textbackground(5);
textcolor(5);
gotoxy(2*l,m+1);
cprintf("²²");
}
}
}
}
}
/*----------------------*/
void DrawData(void){
int register k,l;
if(rp>=20){
textbackground(1);
clrscr();
rp=1;
}
gotoxy(1,25);
for(l=0;l<8;l++) cprintf("%2d.",j_o[l]);
gotoxy(19,rp++);
textbackground( 0 );
textcolor( 15 );
cprintf("Vazir_no=%d,j=%d,j[i]=%d,j[i-1]=%d",Vazir_no,j,j_o[Vazir_no],j_o[Vazir_no-1]);
for(k=0;k<8;k++){
gotoxy(50,k+1);
for(l=0;l<8;l++){
textbackground(0);
textcolor( aray[l][k] );
if(aray[l][k]>=50){
textbackground(7);
textcolor( aray[l][k]-49 );
}
cprintf("%2d.",aray[l][k]);
}
}
}
سلام برای برنامه های کوچکی مثل عدد آنگسترم و عدد اول اینجور چیزا رو من میتونید حساب کنید