【洛谷】P1219 [USACO1.5]八皇后 Checker Challenge
Acode:
#include
using namespace std;
int n, a[100], b[100], c[100], d[100],ans;//n,行,列,对角线一,对角线二,结果
void print()//打印
{
if (ans < 3)
{
for (int w = 1; w <= n; w++)
{
cout << a[w] << " ";
}
cout << endl;
}
ans++;//统计一共有多少解法
}
void dfs(int i)
{
if (i > n)//结束
{
print();
return;
}
else
{
for (int j = 1; j <= n; j++)//候选节点,具体一行的每一列
//j从1开始,自然就是字典顺序最小
{
if (!b[j]&& !c[i + j] && !d[i - j + n])//该列没占过,该对角线一没占过,该对角线二没占过
{
a[i] = j;//把每一行的八皇后的位置标记,便于打印
b[j] = 1;//标记
c[i + j] = 1;//标记
d[i - j + n] = 1;//标记
dfs(i + 1);//换下一行dfs
a[i] = 0;//回溯
b[j] = 0;//回溯
c[i + j] = 0;//回溯
d[i - j + n] = 0;//回溯
}
}
}
}
int main()
{
cin >> n;//输入规模
dfs(1);//从第一行开始找八皇后位置
cout << ans;//输出结果
return 0;//结束
}
over~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
