這是我迄今爲止所做的解決return 1;
,return 0;
,它實際上是一個使用回溯算法的數獨求解器,所以我試圖並行化它,但我無法得到完整的結果。 (糾正我,如果我的實施是錯誤的) 實際發生了什麼?有人可以幫忙嗎?!如何解決打開mp中的for循環中的「返回0或返回1」?
這是我指的是網站,我曾經按照自己的方式:http://www.thinkingparallel.com/2007/06/29/breaking-out-of-loops-in-openmp/#reply
int solver (int row, int col)
{
int i;
boolean flag = FALSE;
if (outBoard[row][col] == 0)
{
#pragma omp parallel num_threads(2)
#pragma omp parallel for //it works if i remove this line
for (i = 1; i < 10; i++)
{
if (checkExist(row, col, i)) //if not, assign number i to the empty cell
outBoard[row][col] = i;
#pragma omp flush (flag)
if (!flag)
{
if (row == 8 && col == 8)
{
//return 1;
flag = TRUE;
#pragma omp flush (flag)
}
else if (row == 8)
{
if (solver(0, col+1))
{
//return 1;
flag = TRUE;
#pragma omp flush (flag)
}
}
else if (solver(row+1, col))
{
//return 1;
flag = TRUE;
#pragma omp flush (flag)
}
}
}
if (flag) { return 1; }
if (i == 10)
{
if (outBoard[row][col] != inBoardA[row][col])
outBoard[row][col] = 0;
return 0;
}
}
else
{
if (row == 8 && col == 8)
{
return 1;
}
else if (row == 8)
{
if (solver(0,col+1)) return 1;
}
else
{
if (solver(row+1,col)) return 1;
}
return 0;
}
}
5 0 0 0 0 3 7 0 0
7 4 6 1 0 2 3 0 0
0 3 8 0 9 7 5 0 2
9 7 0 4 0 0 2 0 0
0 0 2 0 0 0 4 0 0
0 0 4 0 0 5 0 1 9
4 0 3 2 7 0 9 8 0
0 0 5 3 0 9 6 7 4
0 0 7 5 0 0 0 0 3
Sudoku solved :
5 2 9 8 0 3 7 4 1
7 4 6 1 5 2 3 9 0
1 3 8 0 9 7 5 6 2
9 7 0 4 1 0 2 3 6
0 1 2 9 6 0 4 5 8
3 6 4 7 8 5 0 1 9
4 0 3 2 7 6 9 8 5
2 8 5 3 0 9 6 7 4
6 9 7 5 4 8 1 2 3
的//return 1;
是原始串行代碼,因爲return
在parallel for
是不允許的,所以我用#pragma opm flush
來消除它,但結果並不完整,它仍然在數獨中留下了很少的空格。
謝謝回答:>
「我希望我的代碼不會把你搞砸」不,不,但是你的拼寫和語法很糟糕。請至少嘗試清理它,所以它是可讀的。 –
@Tony,原諒我可憐的英語,我會改進它。如果你能回答我的問題,我很高興? – CT5275
我對openmp沒有任何經驗,所以幫不了你。對不起:( –