思想:存三个数组记录记录走的过程,运用回溯不符合或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: utf-8 -*- # python:2.x __author__ = 'Administrator' import sys from PyQt4.QtCore impor ...

  2. PLSql连接远程Oracle方法

  3. 基于阿里云server搭建SVNserver

    基于阿里云server搭建SVNserver 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/8577 ...

  4. C/C++笔试准备(1)

    题目:用递归的算法实现这样一个函数,计算一个字符串最大连续相同字符数,输入aaabbc,输出3:输入bbc,输出2 #include <iostream> using namespace ...

  5. 调试Linq的时候获得相对应的SQL

    (query as System.Data.Objects.ObjectQuery).ToTraceString()

  6. JavaScript --------------继前面继承方式-------总结

    创建对象方式: 工厂模式:使用简单的函数创建对象,为对象添加属性和方法,然后返回对象: function createPerson(name,age,job){ var o = new Object( ...

  7. asp.net 发送邮件函数两则

    using System.Net.Mail; using System.Text; using System.Net; #region 邮件发送 /// <summary> /// 邮件发 ...

  8. java 去除重复项

    import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Demo20 { public stati ...

  9. MIT scheme入门使用

    在win7下可安装MIT-GUN scheme, 点开后有两个界面:一个交互式命令行界面:一个Edwin界面.    在命令行界面按Ctrl-G可以开始输入.在Edwin界面,输入完整命令后按Ctrl ...

  10. 提示框的优化之自定义Toast组件之(二)Toast组件的业务逻辑实现

    在java下org.socrates.mydiary.activity下LoginActivity下自定义一个方法showCustomerToast()  public class LoginAct ...