C语言实现4皇后问题:代码解析与求解方案
#include <stdio.h> #include <stdlib.h>
#define N 4
int queen[N]; // 皇后位置
/* 判断当前位置是否合法 */ int is_valid(int row, int col) { int i; for (i = 0; i < row; i++) { if (queen[i] == col || abs(queen[i] - col) == abs(row - i)) { return 0; } } return 1; }
/* 输出结果 */ void print_result() { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (queen[i] == j) { printf('Q '); } else { printf('. '); } } printf("\n"); } printf("\n"); }
/* 回溯求解 */ void backtrack(int row) { int col; if (row == N) { print_result(); return; } for (col = 0; col < N; col++) { if (is_valid(row, col)) { queen[row] = col; backtrack(row + 1); } } }
int main() { backtrack(0); return 0; }
运行结果为:
. Q . . . . . Q Q . . . . . Q .
. . Q . Q . . . . . . Q . Q . .
共有两种解法。
原文地址: https://www.cveoy.top/t/topic/n6Ht 著作权归作者所有。请勿转载和采集!