gpt4 book ai didi

c - 指数问题及其 C 表示

转载 作者:行者123 更新时间:2023-11-30 17:22:35 25 4
gpt4 key购买 nike

我遇到了著名的 N-Queen 问题,我想知道如何编写一个程序来计算这个特定问题的可能性数量。我的程序可以快速找到非常小的 N 的解决方案(因为它是启发式的)。

我还想知道如何在 C 中表示这么大的数字。有没有针对真正大数字的算法?每当我编写和实现我自己的算术时,我都会得到 i。 e.二次乘法与大量内存分配的速度不可能很快。预先感谢您的详尽回答。

最佳答案

here is a nice solution, using recursion 
(taken from: <http://rosettacode.org/wiki/N-queens_problem#C>)

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef uint32_t uint;
uint full, *qs, count = 0, nn;

void solve(uint d, uint c, uint l, uint r)
{
uint b, a, *s;
if (!d) // exit condition
{
count++;
#if 0
printf("\nNo. %d\n===========\n", count);
for (a = 0; a < nn; a++, putchar('\n'))
{
for (b = 0; b < nn; b++, putchar(' '))
{
putchar(" -QQ"[((b == qs[a])<<1)|((a + b)&1)]);
} // end for
} // end for
#endif
return;
} // end if

a = (c | (l <<= 1) | (r >>= 1)) & full;
if (a != full)
{
for (*(s = qs + --d) = 0, b = 1; b <= full; (*s)++, b <<= 1)
{
if (!(b & a))
{
solve(d, b|c, b|l, b|r);
} // end if
} // end for
} // end if
} // end function: solve


int main(int n, char **argv)
{
if (n <= 1 || (nn = atoi(argv[1])) <= 0) nn = 8;

qs = calloc(nn, sizeof(int));
full = (1U << nn) - 1;

solve(nn, 0, 0, 0);
printf("\nSolutions: %d\n", count);
return 0;
} // end function: main

关于c - 指数问题及其 C 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com