标签:
Description
Input
Output
Sample Input
Sample Output
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int inf=0x3f3f3f3f; 5 int ans[12],n,vis[4][40]; 6 int sum; 7 bool check(int x,int n)//检查(x,n)这个点是否能被攻击到 8 { 9 return vis[0][x]==0&&vis[1][n]==0&&vis[2][x+n]==0&&vis[3][20+x-n]==0; 10 } 11 void set_value(int x,int n,int value) 12 { 13 vis[0][x]=vis[1][n]=vis[2][x+n]=vis[3][20+x-n]=value; 14 } 15 void dfs(int x) 16 { 17 if(x>=n)//如果已经填上了n个点,那么结果加一 18 { 19 sum++; 20 return; 21 } 22 for(int i=0;i<n;i++) 23 if(check(x,i)) 24 { 25 set_value(x,i,1); 26 dfs(x+1); 27 set_value(x,i,0); 28 } 29 } 30 int solve(int a) 31 { 32 sum=0; 33 memset(vis,0,sizeof vis); 34 dfs(0); 35 return sum; 36 } 37 38 int main() 39 { 40 memset(ans,0x3f,sizeof ans); 41 while(scanf("%d",&n)!=EOF&&n) 42 { 43 if(ans[n]==inf) ans[n]=solve(n); 44 printf("%d\n",ans[n]); 45 } 46 return 0; 47 }
标签:
原文地址:http://www.cnblogs.com/I-love-HLD/p/4624658.html