数据结构:八皇后、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;
}

猜你喜欢

转载自blog.csdn.net/thelostlamb/article/details/79389547
今日推荐