📄 013.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 + -