trong void checkbishop khi thay: if(abs(i-x) == abs(a[i] - y) ) bằng if(abs(i-6+x) == abs(a[i] - y) ) thì không chạy chương trình ,em làm theo kiểu tách ô đen và ô trắng ra thành 2 phần, xong tìm được số con tượng trong ô đen lớn nhất thì nhân 2 là ra, thực sự rất bí với con bug này,dưới đây là code:
#include<stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
int a[20];int b[8][8];
int CheckBishop(int x,int y)
{
if(x>3)
{
for(int i = 0; i <x ;i++)
{
if(i>2)
{
if(abs(i-x) == abs(a[i] - y) )
return 0;
}
else
{
// if(abs(i-6+x) == abs(a[i] - y) )
if(abs(i-x) == abs(a[i] - y) )
return 0;
}
}
}
else
{
for(int i = 0; i <x ;i++)
{
if(abs(i-x) == abs(a[i] - y) )
return 0;
}
}
return 1;
}
void Clear(int a[][8])
{
for(int j=0;j<8;j++)
{ for(int i=0;i<8;i++)
a[i][j]=0;
}
}
void Show(int a[][8])
{ for(int i=0;i<8;i++)
{ for(int j=0;j<8;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void SetBishop(int n){
for(int i=0;i<n-1;i++)
{
if(i<3)
b[2*i+1-a[i]][a[i]]=1;
if(i==3)
b[7-a[i]][a[i]]=1;
if(i>3)
b[7-a[i]][a[i]+(i-3)*2]=1;
}
Show(b);
Clear(b);
cout<<"_______________\n";
}
void SolveBishop(int i,int n)
{
for(int j = 0;j<(8-2*abs(3-i));j++){
// cout<<CheckBishop(i,j)<<"\n";
if(CheckBishop(i,j)==1){
a[i] = j;
if(i==6)
{
SetBishop(n);
printf("co %d con tuong tren ban co\n",2*(n-1));
for(int x=0;x<7;x++)
cout<<a[x]<<" ";
cout<<"\n";
// exit(0);
}
else
SolveBishop(i+1,n);
}
}
}
int main()
{
SolveBishop(0,8);
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?