八皇后问题,C语言二维数组回溯算法求解

#include 

int count = 0;
int chess[8][8]={0};

int check(int row,int col)
{
	int i,j;
	
	//判断列方向 
	for(i=0;i<8;i++)
	{
		if(*(*(chess+i)+col))
			return 0;
	}
	
	//判断左对角线 
	for(i=row,j=col;i>=0 && j>=0;i--,j--)
	{
		if(*(*(chess+i)+j))
			return 0;
	}
	
	//判断右对角线 
	for(i=row,j=col;i>=0 && j<8;i--,j++)
	{
		if(*(*(chess+i)+j))
			return 0;
	}
	
	return 1;
}

void print()
{
	int i,j;
	count ++;
	printf("这是第%d种解法。\n",count);
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
		{
			printf("%d ",*(*(chess+i)+j));
		}
		putchar('\n');
	}
}

void Eightqueen(int row)
{
	int col;
	
	if(row == 8)
	{
		print();
		return ;
	}
	else
	{
		for(col=0;col<8;col++)
		{
			if(check(row,col))//判断该位置是否可以放后 
			{
				*(*(chess+row)+col) = 1;
				Eightqueen(row+1);//可以放后,接着判断下一行 
				*(*(chess+row)+col) = 0;//回溯时将后清除 
			}
		}
	}
}

int main(int argc, char *argv[]) 
{
	Eightqueen(0);
	printf("\n共有%d种解法。\n",count);
	
	return 0;
}

你可能感兴趣的:(C语言数据结构与算法系列,c语言,算法,数据结构)