gpt4 book ai didi

c - 使用 openmp c 的 Nqueens

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:06 24 4
gpt4 key购买 nike

我正在用 open mp 解决 n Queens 问题,

(最初的八皇后问题包括试图找到一种方法将八个皇后放在棋盘上,这样没有皇后会攻击任何其他皇后。表达该问题的另一种方式是将八个“任何东西”放在一个八八个网格,这样它们都不会共享公共(public)行、列或对角线。)

如果您查看我尝试使用 #pragma omp task 的代码,但似乎进入了一个永远的循环,您将如何在 solve(int Queens[]) 中使用 omp task 功能?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <omp.h>

#define N 15
#define MAXThreads 2

int solutions;

int put(int Queens[], int row, int column)
{
int i;
//#pragma for schedule(static)
for(i=0; i<row; i++) {
if (Queens[i] == column || abs( Queens[i]-column ) == ( row-i ) )
return -1;
}
Queens[row]=column;
if(row==N-1) {
#pragma omp critical
{
solutions++;
}
}else{
for(i=0; i<N; i++) { // increment row
put(Queens, row+1, i);
}
}
return 0;
}


void solve(int Queens[]) {
int i;
#pragma omp parallel private(Queens) num_threads(MAXThreads)
{
// #pragma omp single
// {
#pragma omp for schedule(static)
for(i=0; i<N; i++) {
// #pragma omp task
put(Queens, 0, i);
// }
}
}

}



int main()
{
int Queens[N];
time_t t0=0, tf=0,t0s=0,tfs=0;
//------------------------------------------
t0 = time(NULL);
//------------------------------------------
//solve_secuencial(Queens);
solve(Queens);
//------------------------------------------
tf = time(NULL);
//------------------------------------------
printf( "# solutions %d time: %f \n",solutions, difftime(tf, t0));

return 0;

}

最佳答案

自从上次使用 OpenMP 以来已经有一段时间了,但我相信 private(p),其中 p 是一个指针(或数组参数)只会使指针,不是被指向的数据,私有(private)的。所以数组本身仍然是共享的。参见 this question .

关于c - 使用 openmp c 的 Nqueens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609946/

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