数据结构:八皇后、N皇后
八皇后:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <memory.h>
int n = 8;
int total = 0;
int c[8];
bool is_ok (int row) {
for (int j = 0; j < row; j++) {
if (c[row] == c[j] || row - c[row] == j - c[j] || row + c[row] == j + c[j]) {
return false;
}
}
return true;
}
void queen (int row) {
if (row == n) {
total++;
}
else {
for (int col = 0; col < n; col++) {
c[row] = col;
if (is_ok(row)) {
queen(row+1);
}
}
}
}
int main (int argc, char **argv) {
queen(0);
printf("%d", total);
return 0;
}
N皇后:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <memory.h>
int visit[3][50];
int a[50];
int sum;
int n = 8;
void dfs (int row) {
int i;
if (row == n+1) {
sum++;
return;
}
for (i=1; i<=n; i++) {
if (visit[0][row-i+n] == 0 && visit[1][i] == 0 && visit[2][row+i] == 0) {
visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 1;
dfs(row+1);
visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 0;
}
}
}
int main (int argc, char **argv) {
sum = 0;
memset(visit, 0, sizeof(visit));
dfs(1);
printf("%d", sum);
return 0;
}
还没有评论,来说两句吧...