Mọi người xem giúp mình vì sao đến nước đi thứ 32 , sang nước đi thứ 33 thì nó bị lỗi vậy Mã: #include <stdio.h> #include <stdlib.h> void Create(int BanCo[12][12]) { for(int i=0;i<12;i++) for(int j=0;j<12;j++) if(i>=2 && i<=9 && j>=2 && j<=9) BanCo[i][j]=0; // Khoi tao ban co else BanCo[i][j]=-1;// Cac duong vien ben ngoai } void Print(int BanCo[12][12]) { for(int i=0;i<12;i++) { for(int j=0;j<12;j++) printf("%4d",BanCo[i][j]); printf("\n\n"); } } void Try(int buoc_di,int i,int j,int BanCo[12][12],int *I,int *J) { for(int l=0;l<7;l++) { if(BanCo[i+I[l]][j+J[l]]==0) //o chua qua , dat duoc { if(buoc_di+1 == 63)//hoan tat { for(i=2;i<10;i++) for(j=2;j<10;j++) if(BanCo[i][j]==0) BanCo[i][j]=63; Xuat(BanCo); exit(0); } else { i=i+I[l]; j=j+J[l]; BanCo[i][j]=buoc_di+1; Try(buoc_di+1,i,j,BanCo,I,J); BanCo[i][j]=0; } } } } void main() { int BanCo[12][12]; int I[8]={-2,-1,1,2,2,1,-1,-2}; int J[8]={1,2,2,1,-1,-2,-2,-1}; Create(BanCo); BanCo[2][2]=1; Print(BanCo); Try(1,2,2,BanCo,I,J); } Giúp mình với, mình xin cảm ơn nhiều :)
Bạn thử dùng chức năng debug tìm lỗi chưa ? Mấy cái VC++ với VS rất mạnh về khả năng debug. ____________________________
Giải thuật ở trên làm theo phương pháp đệ quy, tuy đơn giản nhưng chi phí thực hiện là rất tốn kém nếu bàn cờ lớn. Cỡ 10x10 bạn sẽ thấy ngay sự khác biệt. Còn có 1 giải thuật khác giải xin chia sẻ với bạn đó là giải thuật min-max. giải thuật này dựa trên ý tưởng khi 2 người chơi cờ với nhau là làm sao cho nước đi tiếp theo của đối thủ càng ít nước để đi càng tốt. Áp dụng rất tốt cho bài toán mã đi tuần. Giải thuật như sau: ở mỗi một nước đi, xét tất cả các ô cờ mà quân mã có thể đi tới. Với mỗi ô cờ đó, tính xem nếu quân mã đi đến đó thì sẽ có thể đi được tới bao nhiêu ô nữa, gọi số ô này là b. Tìm min của b và ô tương ứng, quân mã sẽ đi đến ô đó. Giải thuật lặp cho đến khi không có ô để đi.
đây là giải thuật mà một đường đi thẳng tới đích cậu à, A* bản chất vẫn là vét, chỉ là không triệt để thôi.
Tôi được biết thì bài tháp hà nôi, con mã đi tuần và xếp hậu vẫn là 3 bài cơ bản để dạy đệ quy. Làm cách khác thì đương nhiên là được nhưng ko cần thiết
bài mã đi tuần với 8 hậu xếp làm ví dụ cho thuật giải min-max mà. Ví dụ bên đệ quy chỉ chứng tỏ độ phức tạp của đệ quy rất lớn thôi . Các bài đệ quy cơ bản là tính tổng, giai thừa, dãy finonaci... mà chủ thớt xong việc rồi sao tụi mình nhiều chuyện thế nhỉ