这个问题咋解决阿
头文件:
head.h
#pragma once
#include <stdio.h>
#define N 8
static int que[N] = { 0 };//棋盘,下标为行数,值为列数,代表皇后位置
static int col[N] = { 0 };
static int right[2 * N - 1] = { 0 };
static int left[2 * N - 1] = { 0 };
static int count = 0;
void Queen();
void Print();
源文件:
print.c
#include <stdio.h>
#include "head.h"
void Print()
{
count++;
printf("第%d种解法>\n", count);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (j == que[i])
printf("1 ");
else printf("0 ");
}
printf("\n");
}
printf("\n");
}
queen.c
#pragma once
#include <stdio.h>
#include "head.h"
void Queen()
{
int i = 0, j = 0;
while (i < N)
{
while (j < N)
{
if (col[j] == 0 && right[i + j] == 0 && left[i - j + N - 1] == 0)//判断该点是否能放皇后
break;
j++;//不能放则j++变成下一列
}
if (j < N)//j<N说明可以放皇后
{
//放置皇后,将有皇后的列、左斜线、右斜线标记
que[i] = j;
col[j] = 1;
right[i + j] = 1;
left[i - j + N - 1] = 1;
if (i < N - 1)//若还没到最后一行,进入下一行,从第一列开始
{
i++;
j = 0;
continue;
}
else {
Print();
}
}
else {
i--;
j = que[i];
}
col[j] = 0;//清空
right[i + j] = 0;
left[i - j + N - 1] = 0;
j++;
if (i == 0 && j == N)
break;
}
}
这是咋回事嘞朋友们?