데이터 구조 와 알고리즘 노트 lesson 16 8 황후 문제
                                            
 2064 단어  데이터 구조알고리즘 학습 노트
                    
있다×8 칸 짜 리 체스 에 8 개의 황 후 를 배치 하여 서로 공격 할 수 없 게 한다. 즉, 임의의 두 황 후 는 같은 줄, 같은 열 또는 같은 사선 에 있 을 수 없 으 며 몇 가지 방법 이 있 는 지 물 어 본다.
#include
int count = 0;
int notDanger(int row, int j, int(*chess)[8])
{
	int i ,k,flag1=0, flag2 = 0, flag3 = 0, flag4 = 0, flag5 = 0;
	//             ,         1
	for (i = 0; i < 8; i++)
	{
		if (*(*(chess + i) + j) != 0)
		{
			flag1 = 1;
			break;
		}
	}
	//     
	for (i = row, k = j; i >= 0 && k >= 0; i--, k--)
	{
		if (*(*(chess + i) + k) != 0)
		{
			flag2 = 1;
			break;
		}
	}
	//     
	for (i = row, k = j; i <8 && k<8; i++, k++)
	{
		if (*(*(chess + i) + k) != 0)
		{
			flag3 = 1;
			break;
		}
	}
	//     
	for (i = row, k = j; i >=0&& k<8; i--, k++)
	{
		if (*(*(chess + i) + k) != 0)
		{
			flag4 = 1;
			break;
		}
	}
	//     
	for (i = row, k = j; i <8 && k>=0; i++, k--)
	{
		if (*(*(chess + i) + k) != 0)
		{
			flag5 = 1;
			break;
		}
	}
	if (flag1 || flag2 || flag3 || flag4 || flag5)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}
//row :       n:       (*chess)[8]:               
void EightQueen(int row, int n, int(*chess)[8])
{
	int chess2[8][8], i, j;
	for (i = 0; i < 0; i++)
	{
		for (j = 0; j < 8; j++)
		{
			chess2[i][j] = chess[i][j];
		}
	}
	if (8 == row)
	{
		printf(" %d 
", count + 1);
		for (i = 0; i < 8; i++)
		{
			for (j = 0; j < 8; j++)
			{
				printf("%d", *(*(chess2 + i) + j));//chess[i][j]
			}
			printf("
");
		}
		printf("
");
		count++;
	}
	else
	{
		for (j = 0; j < n; j++)
		{
			if (notDanger(row,j,chess)) //      
			{
				//     ,    
				for (i = 0; i < 8; i++)
				{
					*(*(chess2 + row) + i) = 0;
				}
				*(*(chess2 + row) + j) = 1;
				
				EightQueen(row+1 , n, chess2);
			}
		}
	}
}
int main()
{
	int chess[8][8], i, j;
	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			chess[i][j] = 0;
		}
	}
	EightQueen(0,8,chess);
	printf("   %d 
", count);
	return 0;
} 
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.