本文主要是介绍P1219 八皇后 洛谷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题链接https://www.luogu.org/problemnew/show/P1219
八个皇后不能有两个或以上同时处于同一行,同一列,同一个对角线,也就是说,每行最多一位皇后
只要对每行皇后所处位置进行枚举,满足条件后输出即可
直接上代码:
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>using namespace std;int x;
int ans=0,a[15],flag=0;int check(int m,int n)
{for(int i=0;i<x;i++) if(a[i]==n)return 0;for(int i=1;m-i>=0&&n-i>=0;i++)if(a[m-i]==n-i)return 0;for(int i=1;m+i<x&&n+i<x;i++)if(a[m+i]==n+i)return 0;for(int i=1;m-i>=0&&n+i<x;i++)if(a[m-i]==n+i)return 0;for(int i=1;m+i<x&&n-i>=0;i++)if(a[m+i]==n-i)return 0;return 1;
}void queen(int i)//i: the i line
{if(i>=x){ans++;if(flag<3){for(int k=0;k<x;k++){cout<<a[k]+1<<" ";}cout<<endl;flag++;}return;}for(int k=0;k<x;k++){if(check(i,k)==1){a[i]=k;queen(i+1);a[i]=-1;}}return;
}int main()
{cin>>x;for(int i=0;i<x;i++)a[i]=-1;queen(0);cout<<ans<<endl;return 0;
}
代码中,数组a[i]==k,表示第(i,k)上有皇后
对了,我这样写最后一个测试点过不了,开o2优化过了(逃
这篇关于P1219 八皇后 洛谷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!