Lỗi không chạy chương trình trong bài tìm số con tượng lớn nhất không ăn nhau đặt trong bàn cờ

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?