hdu 2353 n皇后问题
你的任务是,对于给定的N,求出有多少种合法的放置方法。
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace  std;
long long a[100];
long long sum;
int visit(int k,int x)//行数    皇后所在的列数 
{
 int i;
 for(i=1;i<k;i++) 
 {
  if(a[i]==x||(abs(k-i)==abs(x-a[i]))) 
  {
   return 0;
  }
 }
    return 1;
}
void dfs(int k,int end)//k表示行数 //  这里的dfs为到一步后  还有n步。
{
 int i;
 if(k>end)
 {
  sum++;
  return;
 }
 for(i=1;i<=end;i++)
 {
  if(visit(k,i)==1)
  {
   a[k]=i;
   dfs(k+1,end);
  }
 }
}
int main()
{
    long long sume[110],i,n;
    for(i=1;i<=10;i++)
 {
  sum=0;
  memset(a,0,sizeof(a));
  if(n==0) break;
  dfs(1,i);
  sume[i]=sum;
 }
 while(~scanf("%I64d",&n))
 {
   if(n==0) break;
   printf("%I64d\n",sume[n]);
 }
 return 0;
}
这里对应的模板就是这样
///void   DFS(int k)  //处理第k步  
{   if  (k==n)   //已经处理到第n步,到达目的状态  
               输出结果
    else   //处理第k步
          for (int i=1; i<=m; i++)  //第k步中有m种可能
          {    处理第k步 
                    DFS(k+1);//进入第k+1步
          }
}
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号