#include <iostream>
#include <string>
using namespace std;
int kq[8];
int cot[8];
int cheo_chinh[15];
int cheo_phu[15];
void xep_hau(int k)
{
//memset(kq,0,sizeof(kq));
memset(cot,0,sizeof(cot));
memset(cheo_chinh,0,sizeof(cheo_chinh));
memset(cheo_phu,0,sizeof(cheo_phu));
for (int i = 0;i<8;i++)
{
for (int j = 0;j<8;j++)
{
if(cot[i] == 0 && cheo_chinh[i+j] == 0 && cheo_phu[i-j+7] == 0)
{
kq[k] = i;
cot[i] == 1;
cheo_chinh[i+j] = 1;
cheo_phu[i-j+7] = 1;
}
}
}
if(k == 7) for(int i = 0;i<8;i++)
{
cout << endl;
cout << kq[i];
}
else xep_hau(k+1);
}
int main()
{
xep_hau(0);
system("pause");
return 0;
}
bài toán con Hậu sai ở đâu nhỉ .... :)
Mình dùng dev C++.
11 26 C:\Users\LocDC\Desktop\z.cpp [Error] ‘memset’ was not declared in this scope.
Nếu bạn có làm thư viên “memset.h” thì bạn chưa #include. Còn nếu bạn không định nghĩa thư viện thì phải có hàm này, còn thuật toán thì mình k biết :)))))
void* memset( void* buffer, int ch, size_t count )
{
char *p = (char *)buffer;
for(int i=0; i < count; i++)
p[i] = (char) ch;
return buffer;
}
mình dùng visual stdio 2010 có đầy đủ thư viện trong iostream rùi cậu ạ
Vậy thì chắc thuật toán
Tại sao bạn in ra như vậy? Giải thích hộ mình với
bài toán xếp hậu này bạn có thể đọc trong cuốn cấu trúc dữ liệu giải thuật của lê Minh Hoàng. bài này là một trong những bài kinh điển của thuật toán quay lui
đọc rùi nắm dc giải thuật rồi có điều trong quá trình code có chỗ code sai thôi … nên mới hỏi xem có ai nhìn ra giúp với
#include<iostream>
#include<cstdio>
#include<string.h>
int n;
int X[9];
bool A[8],B[16],C[16];
using namespace std;
void Display()
{
for(int i=1;i<=n;i++)
cout << "("<<i<<","<<X[i] <<") ";
cout <<"\n";
}
int Try(int i)
{
for(int j=1;j<=n;j++)
{
if(A[j]&&B[i+j-1]&&C[j-i+8])
{
X[i]=j;
if(i==n)
{
Display();
}
else
{
A[j]=0;
B[i+j-1]= 0;
C[j-i+8]=0;
Try(i+1);
A[j]=1;
B[i+j-1]= 1;
C[j-i+8]=1;
}
}
}
}
int main()
{
// freopen("QUEENS.INP","r",stdin);
// freopen("QUEENS.OUT","w",stdout);
cin >> n;
memset(A,1,9);
memset(B,1,16);
memset(C,1,16);
Try(1);
return 0;
}
Mình sửa lại format code giúp bạn nhé. Bạn xem bài viết này để sử dụng markdown trên diễn đàn
Mình chưa đọc toàn bộ code nhưng phần in kết quả như thế có nghĩa kq[i] là tung độ của hàng thứ i. Nếu
k == 7 nghĩa là bàn cờ 8 ô, dùng mảng thì có chỉ số từ 0 -> 7. Khi chạy đến hàng thứ 7 nghĩa là tất cả các hàng trước đó đã tim ra tung độ phù hợp => in ra thôi smiley