计蒜客--八皇后问题
Posted pythonbigdata
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客--八皇后问题相关的知识,希望对你有一定的参考价值。
AC代码:
#include<stdio.h> #include<vector> #include<algorithm> using namespace std; int a[10][10]; int vis[10]; vector<int> v; void search(int cur,int sum){ if(cur==8){ v.push_back(sum); } else for(int i=0;i<8;i++){ vis[cur]=i; int ok=1; for(int j=0;j<cur;j++){ if(vis[cur]==vis[j]||vis[cur]+cur==vis[j]+j||cur-vis[cur]==j-vis[j]){ ok=0; break; } } if(ok){ search(cur+1,sum+a[cur][vis[cur]]); } } } int main(){ for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ scanf("%d",&a[i][j]); } } search(0,0); sort(v.begin(),v.end()); printf("%d",v[v.size()-1]); //printf("%d",v.size()); return 0; }
注意:既然是逐行放置的,则皇后肯定不会横向攻击,因此只需检查是否纵向和斜向攻 |
击即可。 条件“cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]”用来判断皇后(cur,C[cur])和 |
(j,C[j])是否在同一条对角线上。 |
以上是关于计蒜客--八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章