(define (range n)
(define (recur n)
(if (= n -)
'()
(cons n (recur (- n )))))
(recur (- n ))) (define (flatten a)
(if (null? a)
'()
(append (car a) (flatten (cdr a))))) (define (safe? x y sln)
(if (null? sln)
#t
(let ((px (car (car sln))) (py (cadr (car sln))))
(if (or (= y py) (= (- py y) (- px x)) (= (- py y) (- x px)))
#f
(safe? x y (cdr sln)))))) (define (nqueen n)
(define (recur x)
(if (= x -)
(list '())
(flatten (map (lambda (y) (map (lambda (sln) (cons (list x y) sln)) (filter (lambda (sln) (safe? x y sln)) (recur (- x ))))) (range n)))))
(recur (- n ))) (define (pl a)
(if (null? a)
'()
(begin (display (car a)) (display "\n") (pl (cdr a))))) (pl (nqueen ))

流 版本:

#lang racket
(require racket/stream) (define-syntax-rule (scons a b) (stream-cons a b))
(define-syntax-rule (scar a) (stream-first a))
(define-syntax-rule (scdr a) (stream-rest a))
(define-syntax-rule (smap f s) (stream-map f s))
(define-syntax-rule (sfilter f s) (stream-filter f s))
(define-syntax-rule (sreduce f i s) (stream-fold f i s))
(define-syntax-rule (snull? s) (stream-empty? s))
(define-syntax-rule (sappend s ...) (stream-append s ...))
(define-syntax-rule (sfor f s) (stream-for-each f s)) (define (sflatten a)
(if (snull? a)
empty-stream
(sappend (scar a) (sflatten (scdr a))))) (define (srange n)
(let recur ((x ))
(if (= x n)
empty-stream
(scons x (recur (+ x )))))) (define (dis x)
(begin (display x)(newline))) (define (sd s)
(sfor dis s)) (define (safe? x y sln)
(if (snull? sln)
#t
(let ((px (scar (scar sln))) (py (scar (scdr (scar sln)))))
(if (or (= y py) (= (- py y) (- px x)) (= (- py y) (- x px)))
#f
(safe? x y (scdr sln)))))) (define (nqueen n)
(define (recur x)
(if (= x -)
(stream empty-stream)
(sflatten (smap (lambda (y) (smap (lambda (sln) (scons (stream x y) sln)) (sfilter (lambda (sln) (safe? x y sln)) (recur (- x ))))) (srange n)))))
(recur (- n ))) (define ass (sflatten (stream (srange ) (srange ))))
;(define ass (stream (srange ) (srange )))
(sfor (lambda (x) (sfor (lambda (y) (sfor display y)(display ",")) x)(newline)) (nqueen ))

Scheme N皇后的更多相关文章

  1. Scheme来实现八皇后问题(2)

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9790466.html 作者:窗户 Q ...

  2. Scheme来实现八皇后问题(1)

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9768105.html 作者:窗户 Q ...

  3. 递归的神奇之处在于你会发现问题竟然解决了--解N皇后谜题有感

    看sicp看到8皇后谜题, 突然兴致来了,尝试独立解决(scheme代码的好处在于,即使你瞟了眼答案, 也不会有任何收获, 除了知道那儿有一坨神秘的括号和英文字符外但Python代码就不同了),成功了 ...

  4. N皇后问题(C++实现和函数式编程实现)

    题意 在 N * N 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.求出有多少种合法的放置方法. C++实现(位运算 ...

  5. 《sicp》八皇后谜题

    <sicp>八皇后谜题 书中练习2.42.八皇后谜题问的是如何将八个皇后摆在国际象棋棋盘上,使得任意一个皇后都不能攻击另一个皇后(也就是说任意两个皇后都不能在同一行,同一列和同一对角线上) ...

  6. Partition:Partiton Scheme是否指定Next Used?

    在SQL Server中,为Partition Scheme多次指定Next Used,不会出错,最后一次指定的FileGroup是Partition Scheme的Next Used,建议,在执行P ...

  7. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  8. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  9. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

随机推荐

  1. DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

    从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...

  2. Unity3D UGUI 自动调节大小

    可添加以下组件 组件包含的两个枚举参数,可以自行设定适应方式. 例如一个Text UI元素,当文字过多的时候他不会自动增加高度而导致文字不能完全显示,这时候就可以挂载这个组件,如上图设置参数,就可以自 ...

  3. mybatis学习一

    1:ORM概念    ORM(OBJECT-RELATIONSHIP MAPPING) 即对象关系映射,是一种思想,实质是将数据库中的数据用对象的形式表现出来    JPA(JAVA PERSISIT ...

  4. [SDOI 2017]新生舞会

    Description 题库链接 给你个 \(2\times N\) 的带权二分图,两个权值 \(a,b\) ,让你做匹配使得 \[\frac{\sum a}{\sum b}\] 最大. \(1\le ...

  5. [HEOI2016]排序

    题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子 的:给出一个1到n的全排列,现在对这个全排列序列进 ...

  6. Go学习——go+channel实战(转)

    转载:http://studygolang.com/articles/2423 背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Be ...

  7. 洛谷P1397 [NOI2013]矩阵游戏

    矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...

  8. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. B/S与C/S架构

    1.CS.BS架构定义 CS(Client/Server):客户端----服务器结构.C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快.利于处理大量数据. ...

  10. tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例

    tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例 #!/usr/bin/env python # -*- coding: utf-8 ...