搜索题结题报告
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索题结题报告相关的知识,希望对你有一定的参考价值。
N皇后问题(洛谷P1219八皇后)
输入n(6<=n<=13),输入n皇后的前三个解以及解的个数
DFS题,首先是从上到下枚举的,所以横向不会重复,而且有used变量,竖向不重复
如果用函数枚举和(deep,i)是否在一条线上,经过测试后,题目会卡n=13,如果把图画出来
绿色部分满足a[i]-i=i-deep,红色部分满足a[j]+j=deep+j;
(垂直向为i,其横坐标为a[i])采用同used一样的思路可以得出利用变量表示
而绿色因为涉及到减法可能负数(C++不支持负下标)统一加20即可
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; int ans,n; int zx[40],fx[40]; int a[15],used[15]; void DFS(int deep){ if(deep>n){ ans++; if(ans<=3){ for(int i=1;i<=n;i++)printf("%d ",a[i]); printf("\\n"); } return; } for(int i=1;i<=n;i++){ if(zx[deep+i]==0 && fx[20+deep-i]==0 && used[i]==0){ a[deep]=i; used[i]=1; zx[deep+i]=1; fx[20+deep-i]=1; DFS(deep+1); used[i]=0; a[deep]=0; zx[deep+i]=0; fx[20+deep-i]=0; } } } int main(){ cin>>n; DFS(1); cout<<ans; }
以上是关于搜索题结题报告的主要内容,如果未能解决你的问题,请参考以下文章