>>  Site Map >>  Forums >>  C/C++/C#

Forum module - topics in forum:



C/C++/C# - Ngôn ngữ lập trình cục mạnh, cho các phần mềm trên máy



Bài con mã đi tuần -Em viết code rồi nhưng ko in ra màn hình

Bài con mã đi tuần:
Đi con mã trong bàn cờ vua 8x8, sao cho con mã đi hết các ô trên bàn cờ và mỗi ô chỉ đi 1 lần.

Em hiểu thuật toán thế này:
Con mã đầu tiên theo em ở vị trí [0][1] (theo cách sắp quân trên bàn cờ).
1 con mã sẽ đi đc tám hướng.
Em thiết lập BànCờ[8][8] tất cả các ptử đều == 0 và chỉ có phầntử [0][1] == 1
Sau đó dùng kĩ thuật quay liều để cho con mã chạy. Đệ quy chỉ dừng lại khi con mã đã chạy 64 ô (dùng biết đếm để tăng lên, lúc đầu đếm = 1).

Em viết code nhưng ko in ra màn hình. Chtrình ko báo lỗi
Các bác sửa dùm em với!!!
Đây là code em nè!!!
Code: :
#include <stdio.h>
#include <conio.h>
#include <windows.h>
void NhapMaTran(int a[][8]);
void XuatMaTran(int a[][8],  int i, int j);
void MaDi(int BanCo[][8], int i, int j,int dem);
void main()
{
   int a[8][8];
   NhapMaTran(a);
   MaDi(a,0,1,1);
   getch();
}
void NhapMaTran(int a[][8])
{
   for (int i=0; i<8; i++)
   {
      for (int j=0; j<8;j++)
      {
         if (i==0 && j==1)
            a[i][j] = 1;
         else
            a[i][j] =0;
         
      }
   }
}
void XuatMaTran(int a[][8], int i, int j)
{
   if (j == 8)
   {
      if (i==7)
      {
         exit(0) ;
      }
      printf("\n");
      XuatMaTran(a,i+1,0);
   }
   printf("%4d", a[i][j]);
   XuatMaTran(a,i,j+1);
}
void KiemTra(int BanCo[][8])
{
   int flag =1;
   for (int i=0; i<8; i++)
   {
      for (int j=0; j<8; j++)
      {
         if (BanCo[i][j]== 0)
         {
            flag = 0;
            break;
         }
      }
      if (flag == 0)
      {
         break;
      }
   }
   if (flag == 1)
   {
      printf("Xuat ma tran vua nhap: \n");
      XuatMaTran(BanCo,0,0);
   }
}
void MaDi(int BanCo[][8], int i, int j,int dem)
{
    if (dem==6)
    {
      KiemTra(BanCo);
    }
    else
    {
        int dx[8]={-1,-2,-2,-1, 1,2,2,1};
      int dy[8]={-2,-1,1,2,2, 1,-1,-2};
        for (int k=0; k<8;k++)
        {
         if (i+dx[k]>=0 && i+dx[k]<=7 && j+dy[k]>=0 && j+dy[k]<=7)
         {
            if (BanCo[i+dx[k]][j+dy[k]] ==0)
            {
               dem++;
               BanCo[i+dx[k]][j+dy[k]] = dem;
               MaDi(BanCo,i+dx[k],j+dy[k],dem);
            }
         }
      }
   }
}





Search from ALEXA


put your ads here