思想:存三个数组记录记录走的过程,运用回溯不符合或row==n+1就跳出当前层,直到找完;递归时的路径都在保存着,当连续跳出到第一次进入的dfs且i=n时就全部跳出dfs函数了;

 #include<stdio.h>
#include<string.h>
int n,sum;
int visit[][];
int dp[];
void dfs(int row){int i;
if(row==n+){
sum++;return;
}//如果行等于要求找的行数,跳出这一层进行下一次查找
for(i=;i<=n;i++){//一定要注意i为当前列数,变化的visit是一维数组,将行数转化为列数相当于将面化为线,
//分↖↑↗ 这三个数组,主要因为i是从小到大的,存一个数组会造成影响
if(visit[][i]== && visit[][i+row]== && visit[][row-i+n]==){/*i代表当前列数;
visit【i】代表当前这一列是否放皇后; visit[i+row]为↗是否放元素*/
visit[][i] = visit[][i+row] = visit[][row-i+n] = ;//i代表列数,每次从1到n
dfs(row+);
visit[][i]=visit[][i+row]=visit[][row-i+n]=;//回溯,当函数跳出当前层时,证明成功了,或不符合,然后回溯,使上一层走的不算;进行下一次查找;
}//如果if没执行证明不符合i++进行行中下一次查找;
}
return;//如果不符合跳出这一层;
}
int main(){int N;
for(n=;n<=;n++){sum=;
memset(visit,,sizeof(visit));
dfs();
dp[n]=sum;//打表主要怕超时;
}
while(~scanf("%d",&N),N){
printf("%d\n",dp[N]);
}
return ;
}

推荐个帖子:http://topic.csdn.net/t/20060424/13/4709025.html

还有的大神用的位运算,写的;

n皇后问题将递归与回溯用到了极致。。。

精讲N皇后问题的更多相关文章

  1. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...

  2. WKWebView API精讲(OC)

    WKWebView API精讲(OC) 前言 鉴于LL同志对笔者说:“能不能写个OC版本的WKWebView的使用教程?”,还积极打赏了30RMB,笔者又怎么好意思拒绝呢,于是才有了下文. 所有看到本 ...

  3. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

  4. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

  5. iOS开发——语法篇OC篇&高级语法精讲

    高级语法精讲 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 ...

  6. iOS CAShapeLayer精讲

    前言 CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性.但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义. 关于UIBezierPath,请阅读文章:i ...

  7. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  8. iOS-UI控件精讲之UIView

    道虽迩,不行不至:事虽小,不为不成. 相关阅读 1.iOS-UI控件精讲之UIView(本文) 2.iOS-UI控件精讲之UILabel ...待续 UIView是所有UI控件的基类,在布局的时候通常 ...

  9. 【C++自我精讲】基础系列四 static

    [C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...

随机推荐

  1. pyqt显示指定范围的数字

    # -*- coding: cp936 -*- # -*- coding: cp936 -*- import sys from PyQt4 import QtCore, QtGui   #导入模块 a ...

  2. qt model/view 架构自定义模型之QFileSystemModel

    # -*- coding: utf-8 -*- # python:2.x #QFileSystemModel """ Qt  内置了两种模型:QStandardItemM ...

  3. as3 updateAfterEvent的作用

    flash中一共有三个类具有该属性,这三个类分别是:KeyboardEvent,MouseEvent,TimerEvent.调用updateAfterEvent 属性的事件,可强制立即执行呈现操作,而 ...

  4. [转]Laravel 4之请求

    Laravel 4之请求 http://dingjiannan.com/2013/laravel-request/ 获取请求数据 获取当前请求所包括的所有GET和POST数据 Route::get(' ...

  5. Android-JNI编程-图文解析

    要想阅读并调试下文源码,首先要确保你的NDK环境是ok的:        编译环境:win7+Eclipse+ADT+SDK+NDK:基本用最新的就ok.        说明下,下文代码就是一个简单的 ...

  6. IOS中的各种Picker

    简述 在应用的一些设置中经常要用到一些Picker来快速帮助用户选定取值,一般会用到的有UIDatePicker,UIPickerView以及UIImagePickerController. 初始界面 ...

  7. python 弄github代码库列表

    1.底        项目要求,征求github的repo的api,为了能够提取repo对数据进行分析. 研究一天.最终克服该问题,較低下.     由于github的那个显示repo的api,列出了 ...

  8. IoC容器Autofac正篇之解析获取(五)

    解析获取的方式有如下几种: Resolve class Program { static void Main(string[] args) { var builder = new ContainerB ...

  9. Android-------- AlertDialog中EditText无法弹出输入法的解决

    文章转自:http://21jhf.iteye.com/blog/2007375: 如果AlertDialog中有编辑录入框(newMainLayout里面动态创建了EditText控件),show后 ...

  10. Masonry的一些使用。

    除了等距的有问题(懒得改了),其他用过挺正常的,我自己也是刚使用,有问题还请海涵. 地址:http://pan.baidu.com/s/1boyxu8Z