首先在b站上学习了一位巨巨的讲解dfs&bfs虽然还是不太懂bfs,但dfs应该没问题了。(个人认为dfs比较重要的一个是回溯)
这道题主要的点我觉得在于如何判断列,主对角线,副对角线是否有棋子占用(开一个数组来判断这个方法本蒟蒻理解了好长时间。。)
#include<cstdio>
int qipan[3][100]={0},pos[13],n,count=0;
void dfs(int cur)
{
if(cur==n)
{
int first=1;
if(count<3)
{
for(int i=0;i<n;i++)
{
if(first) first=0;
else printf(" ");
printf("%d",pos[i]);
}
printf("\n");
}
count++;
}
else
{
for(int i=1;i<=n;i++)
{
if(!qipan[0][i] && !qipan[1][i+cur] &&!qipan[2][cur-i+n])
{
pos[cur]=i;
qipan[0][i]=1;
qipan[1][i+cur]=1;
qipan[2][cur-i+n]=1;
dfs(cur+1);
qipan[0][i]=0;
qipan[1][i+cur]=0;
qipan[2][cur-i+n]=0;
}
}
}
}
int main()
{
scanf("%d",&n);
dfs(0);
printf("%d",count);
return 0;
}
本文分享了使用深度优先搜索(DFS)解决八皇后问题的代码实现,详细介绍了如何通过数组判断棋盘上的列、主对角线和副对角线是否已被棋子占据,以避免皇后间的相互攻击。
1348

被折叠的 条评论
为什么被折叠?



