30/09/2018, 16:00

bài toán con Hậu sai ở đâu nhỉ .... :)

#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;
}
Đỗ Trung Quân viết 18:03 ngày 30/09/2018

Mình dùng dev C++.
11 26 C:\Users\LocDC\Desktop\z.cpp [Error] ‘memset’ was not declared in this scope.

Đỗ Trung Quân viết 18:14 ngày 30/09/2018

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;
}
Trần Trí Dũng viết 18:09 ngày 30/09/2018

mình dùng visual stdio 2010 có đầy đủ thư viện trong iostream rùi cậu ạ

Đỗ Trung Quân viết 18:09 ngày 30/09/2018

Vậy thì chắc thuật toán

Đỗ Trung Quân viết 18:12 ngày 30/09/2018

if(k == 7) for(int i = 0;i<8;i++)
{
cout << endl;
cout << kq[i];
}

Tại sao bạn in ra như vậy? Giải thích hộ mình với

Hoàng Hữu Thái viết 18:11 ngày 30/09/2018

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

Trần Trí Dũng viết 18:15 ngày 30/09/2018

đọ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

Hoàng Hữu Thái viết 18:09 ngày 30/09/2018
#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;
}
Đỗ Trung Quân viết 18:04 ngày 30/09/2018

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

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null stateme…

viết 18:05 ngày 30/09/2018

Tại sao bạn in ra như vậy? Giải thích hộ mình với

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

Bài liên quan
0