LINUX.ORG.RU

Сообщения ADamCarraway

 

Как распараллелить данный код openmp?

Помогите пожалуйста распараллелить задачу n ферзей. Код работает правильно, осталось только распараллелить

#include<iostream>
#include<stdio.h>
#include <sys/time.h>
#include <cmath>
#include "omp.h"
using namespace std;
//Размерность доски NхN (Количество ферзей - N)
   const int N=12;  int X[N];  int Count;

  bool P(int X[N],int k,int y){  // Поиск позиции для ферзя
	int i=0;
	while ((i<k)&&(y!=X[i])&&(abs(k-i)!=abs(y-X[i]))) {i++;}
	if(i==k)
	return true;
	else return false;  
	}

  void Backtracking(int k){ // Поиск с возвратом позиций
		int i,y;
		for (y=0;y<N;y++)
		if (P(X,k,y)){ 
				X[k]=y;
				if (k==N-1){
					Count++; 
				}
			Backtracking(k+1); 		
		} 
	}	
	
 int main(){ 
	double iv;
	struct timeval st, et;
	gettimeofday(&st, NULL); 
	Count=0;
	cout<<"Doska "<<N<<" na "<<N<<endl;
	omp_set_num_threads(1);
	
	Backtracking(0);
	
   	gettimeofday(&et, NULL);
    iv = (et.tv_sec * 1.0e6 + et.tv_usec) - (st.tv_sec * 1.0e6 + st.tv_usec);
	cout<<"Vsego "<<Count<<" rasstanovok";
   	cout<<"Time: "<< iv / 1e6 <<"sec." << endl;
   }

 ,

ADamCarraway
()

RSS подписка на новые темы