⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 013.cpp

📁 包含两个文件
💻 CPP
字号:
#include <stdio.h>
#include <time.h>


int main()
{
	int N, i, counts, j, k, m, costtime;
	register col, row;
	int *arrCol, *arrRow;
	printf("计算N皇后: 16皇后, 152秒; 14皇后, 3344豪秒;\n");
	printf("输入N:");
	scanf("%d", &N);
//	N = 16;
	clock_t start_time, end_time;
	arrCol = new int[N];
	arrRow = new int[N];
	for (i = 0; i < N; i++)
	{
		arrCol[i] = -1;
		arrRow[i] = -1;
	}
	counts = 0;
	col = 0;
	row = 0;
	start_time = clock();
	costtime = 0;
//	N = N / 2;
	
	while (1)
	{
		for (; col < N; col++)
		{
			if (arrCol[col] == -1) break;
		}
		if (row == 0 && col == N / 2) break;
		if (col == N)
		{
			row--;
//			if (row < 0) break;
			arrCol[arrRow[row]] = -1;
			col = arrRow[row] + 1;
			arrRow[row] = -1;
			continue;
		}
		k = row + 1;
		for (i = 0; i < row; i++)
		{
			j = col - arrRow[i];
//			k = row - i;
			k--;
			if (!(j == k || j == -k)) continue;
			if (((j + k) & 1) == 0) break;
		}
		if (i != row)
		{
			col++;
			continue;
		}
//		arrCol[col] = row;
//		arrRow[row] = col;
//		row++;
		if (row == N - 1)
		{
			counts++;
			col++;
//			for (i = 0; i < N; i++) printf("%d ", arrRow[i]);
//			printf("\n");
/*
			row--;
			arrCol[arrRow[row]] = -1;
			col = arrRow[row] + 1;
			arrRow[row] = -1;
*/
		}
		else 
		{
			arrCol[col] = row;
			arrRow[row] = col;
			row++;
			col = 0;
		}
	}
	end_time = clock();
	printf("%d种解法\n", 2*counts);
	printf("用时:%d毫秒\n", end_time - start_time);
//	cout << costtime << endl;

	delete [] arrCol;
	delete [] arrRow;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -