saer

// erg.cpp : 定义控制台应用程序的入口点。
//>

#include "stdafx.h"
#include"omp.h"
int n;
int q;
void dfs(int b[],int k)
{
    int i,j;
    if(k>n)
    {
        #pragma omp atomic
        q++;
//  find=true;
        return ;
    }
    for(i=1;i<=n;i++)
        {

           for(j=1;j<k;j++)
           {
               if(i==b[j])//不同列  b[j] 表示第j行用了第b[j] 列
                   break;
      int x1=k-j,x2=i-b[j];
      if(x1<0) x1=x1*-1;
      if(x2<0) x2=x2*-1;
               if(x1==x2) //不能斜着相对
                   break;
           }
           if(j<k)
               continue;
            b[k]=i;
            dfs(b,k+1);
       
        }
}

int _tmain(int argc, _TCHAR* argv[])
{
 int i;
 while(scanf("%d",&n))
 {
 q=0;
 omp_set_num_threads(2);
    #pragma omp parallel for
 for(i=1;i<=n;i++)
 {
  
  int y[20];
  y[1]=i;
  dfs(y,2);
 }
 printf("%d\n",q);
 }
 return 0;
}

 

posted @ 2014-10-27 11:28  _一千零一夜  阅读(156)  评论(0编辑  收藏  举报