(define (range n)(define (recur n)(if (= n -1)'()(cons n (recur (- n 1)))))(recur (- n 1)))(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 -1)(list '())(flatten (map (lambda (y) (map (lambda (sln) (cons (list x y) sln)) (filter (lambda (sln) (safe? x y sln)) (recur (- x 1))))) (range n)))))(recur (- n 1)))(define (pl a)(if (null? a)'()(begin (display (car a)) (display "\n") (pl (cdr a)))))(pl (nqueen 4))

流 版本:

#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 0))(if (= x n)empty-stream(scons x (recur (+ x 1))))))(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 -1)(stream empty-stream)(sflatten (smap (lambda (y) (smap (lambda (sln) (scons (stream x y) sln)) (sfilter (lambda (sln) (safe? x y sln)) (recur (- x 1))))) (srange n)))))(recur (- n 1)))(define ass (sflatten (stream (srange 4) (srange 5))))
;(define ass  (stream (srange 4) (srange 5)))
(sfor (lambda (x) (sfor (lambda (y) (sfor display y)(display ",")) x)(newline)) (nqueen 8))

转载于:https://www.cnblogs.com/xiangnan/p/3907175.html

Scheme N皇后相关推荐

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

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

  2. Scheme 语言概要

    作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具.本文分为上. 下两部分来介绍 sc ...

  3. 什么是Scheme?原来还可以这样应用!

    Scheme定义 Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成.它是现代两大Lisp方言 ...

  4. 基于C++11模板元编程实现Scheme中的list及相关函数式编程接口

    前言 本文将介绍如何使用C++11模板元编程实现Scheme中的list及相关函数式编程接口,如list,cons,car,cdr,length,is_empty,reverse,append,map ...

  5. n皇后问题JS实现(N-Queens)

    n皇后问题作为经典的面试题,今天在LeetCode刷到,解法比较直接,回溯递归.其他解法咱也不会.... Leetcode地址:https://leetcode.com/problems/n-quee ...

  6. 编码 data:text/html;c,关于 Data URI Scheme -- data:image/jpg;base64

    转载一篇大神的文章 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqA ...

  7. 回溯 皇后 算法笔记_算法笔记_04_回溯

    设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...

  8. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  9. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

最新文章

  1. 来给你代码加上美颜吧!
  2. idea创建包怎么让包分层_干货 | 通勤包怎么选?我推荐这6只
  3. 2020\Simulation_1\2.约数个数
  4. 24、C++ Primer 4th 笔记,面向对象编程(2)
  5. 爬虫界又出神器|一款比selenium更高效的利器
  6. java 国家名称排序,我有一个国家名单。我想按字母顺序对它进行排序,除了两个我想放在第一位的国家...
  7. Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
  8. switchhost
  9. html5做一个动画qq彩贝,HTML 第九章 作业
  10. 最小二乘支持向量机(LSSVM)学习记录
  11. unity3d 重力加速度传感器控制摄像头
  12. POJ1655 树重心模板题
  13. 小米机器人磁条_如何评价小米米家扫拖机器人1C?
  14. brew对redis的使用
  15. idea设置类注释和方法注释模板
  16. 三元一次方程组例题_最新《三元一次方程组及其解法》例题与讲解
  17. python使用pandas中的to_json函数将dataframe数据写入json文件中
  18. php中实现图片自动轮播,基于vue.js实现图片轮播效果
  19. 红队攻击思路知识框架
  20. JavaScript浏览器对象模型BOM

热门文章

  1. Node.js异步库async
  2. 【LOJ】 #2540. 「PKUWC2018」随机算法
  3. bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成树】
  4. 天平称重【递归解法】
  5. 对 js 高程 Preflighted Reqeusts 的理解
  6. overflow妙用--去除默认滚动条,内容仍可滚动
  7. redis在linux命令行下连续进行命令操作
  8. opencv 直方图反向投影
  9. 编译安装 apache 2.4.6
  10. 设计模式学习-工厂方法模式