poj 1321 棋盘问题

八皇后问题,用dfsj即可。

#include <iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int a[10][10];
int visit[10];
int n,k,sum;
__int64 ans;

void dfs(int x){
    int i,j;
for(i=x+1;i<n;i++)
  for(j=0;j<n;j++){
    if(a[i][j]&&visit[j]==0){
      visit[j]=1;
      sum++;
      if(sum==k){
      ans++;
      }
      else dfs(i);
      sum--;
      visit[j]=0;
    }
  }
}
int main()
{ char ch;
int i,j;
   while(scanf("%d %d",&n,&k)){
     if(n==-1&&k==-1) break;
       memset(visit,0,sizeof(visit));
     ans=0;
     for(i=0;i<n;i++){
       getchar();
       for(j=0;j<n;j++){
         scanf("%c",&ch);
         if(ch=='#')
           a[i][j]=1;
         else a[i][j]=0;
       }
     }
       for(i=0;i<=n-k;i++)
         for(j=0;j<n;j++){
           if(a[i][j]){
             visit[j]=1;
             sum=1;
             if(k==1){
             ans++;
             }
             else {
                 dfs(i);
                 }visit[j]=0;

                 sum--;
           }
         }
     printf("%I64d\n",ans);
   }
    return 0;
}


你可能感兴趣的:(poj 1321 棋盘问题)