拉斯维加斯算法解决n皇后问题,用c语言实现,给出代码
时间: 2024-06-09 11:04:37 浏览: 158
以下是使用拉斯维加斯算法解决n皇后问题的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 100
int n, cnt;
int row[MAX_N], col[MAX_N], d[MAX_N * 2], ud[MAX_N * 2];
int queen[MAX_N];
void print_result() {
int i, j;
printf("Solution %d:\n", ++cnt);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (queen[i] == j) printf("Q ");
else printf(". ");
}
printf("\n");
}
printf("\n");
}
int rand_int(int n) {
return (int)((double)rand() / ((double)RAND_MAX + 1.0) * n);
}
int find(int x, int v[], int n) {
int i;
for (i = 0; i < n; i++) {
if (v[i] == x) return i;
}
return -1;
}
void solve() {
int i, j, k, p, q;
cnt = 0;
srand((unsigned)time(NULL));
while (1) {
for (i = 0; i < n; i++) {
queen[i] = rand_int(n);
if (i == find(queen[i], queen, i)) continue;
break;
}
if (i == n) {
print_result();
return;
}
}
}
int main() {
n = 8; // 皇后个数,可以修改
solve();
return 0;
}
```
代码中的 `rand_int` 函数用于生成一个 0~n-1 之间的随机整数。`solve` 函数是使用拉斯维加斯算法求解n皇后问题的核心函数。在 `solve` 函数中,首先随机生成一个n个皇后的初始解,然后判断是否满足皇后不互相攻击的条件,如果不满足,则重新生成一个随机解,直到找到一个满足条件的解为止。最后输出所有的解。
阅读全文