- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 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/
在用 values-list 解决了我的错误并能够运行我的程序直到结束后,我发现我的对角线检查似乎有逻辑错误。我的输入如下: (威胁?'(1 3)'((1 0)(2 4)(3 0)(4 0)(5 0)
我是 JAVA 新手。下面是我的 NQueens 问题的代码。结果是 [[Ljava.lang.String;@123a439b, [Ljava.lang.String;@7de26db8]。 有人可
我编写了一种使用递归和回溯来找到 N 皇后问题的解决方案的方法。我现在要做的是修改这个方法,让它找到所有可能的解决方案。我假设我需要使用一个二维整数数组来存储所有的解决方案,并且还添加一个计数器,每次
我的 NQueens isSafeMove() 函数不断返回 false,我不明白为什么。我相信这可能与我的 checkLeft、checkUpperDiag 或 checkLowerDiag 有关,
我正在用 open mp 解决 n Queens 问题, (最初的八皇后问题包括试图找到一种方法将八个皇后放在棋盘上,这样没有皇后会攻击任何其他皇后。表达该问题的另一种方式是将八个“任何东西”放在一个
前几天我问了一个关于我的 nQueens 问题的问题,并收到了很多很好的答案,所以我想我会再问一次,因为我非常接近完成这个威胁功能。我的职责是确定水平、垂直或对角线上的威胁。我的输入是这样的: (威胁
我是一名优秀的程序员,十分优秀!