码迷,mamicode.com
首页 > 其他好文 > 详细

搜索题结题报告

时间:2017-10-21 16:27:57      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:而且   pid   垂直   iostream   include   枚举   int   绿色   函数   

 

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;
}

 

搜索题结题报告

标签:而且   pid   垂直   iostream   include   枚举   int   绿色   函数   

原文地址:http://www.cnblogs.com/zhshh/p/7702720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!