递归求解N皇后
2016-07-02 15:48
190 查看
/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 2 日 *版本号:v1.0 *问题描述:编写一个程序递归求解n皇后 * */ #include <stdio.h> #include <stdlib.h> const int N=20; //最多皇后个数 int q ; //存放各皇后所在的列号 int count=0; //存放解个数 void print(int n) //输出一个解 { count++; int i; printf(" 第%d个解:",count); for (i=1;i<=n;i++) printf("(%d,%d) ",i,q[i]); printf("\n"); } int place(int k,int j) //测试(k,j)位置能否摆放皇后 { int i=1; while (i<k) //i=1~k-1是已放置了皇后的行 { if ((q[i]==j) || (abs(q[i]-j)==abs(i-k))) return 0; i++; } return 1; } void queen(int k,int n) //放置1-k的皇后 { int j; if (k>n) print(n); //所有皇后放置结束 else for (j=1;j<=n;j++) //在第k行上穷举每一个位置 if (place(k,j)) //在第k行上找到一个合适位置(k,j) { q[k]=j; queen(k+1,n); } } int main() { int n; //n存放实际皇后个数 printf(" 皇后问题(n<20) n="); scanf("%d",&n); if (n>20) printf("n值太大,不能求解\n"); else { printf(" %d皇后问题求解如下:\n",n); queen(1,n); printf("\n"); } return 0; }
运行结果:
相关文章推荐
- 白话scala系列二 scala入门的几个基本知识
- redis源码安装
- java-String中的 intern()
- 开源库分享__通用数字分隔控件(NumberSeparateEditText)
- 文件句柄
- lua 小知识
- 【VS开发】【图像处理】双边滤波器bilateral filter
- hadoop异常 error in shuffle in fetcher
- 利用post-commit自动化持续部署Jexus站点
- RS-232, RS-422, RS-485 Serial Communication General Concepts(转载)
- 自建pod库
- [2016/07/02] LeetCode / Java - Day 10 -
- 使用volley上传图片,一个参数多张图、多张图片多张图
- MySQL创建用户的三种方法
- Storm并发机制详解
- 前端基础三
- Storm并发机制详解
- Java安全管理器(Security Manager)
- JDK中的动态代理
- Java中static的用法详解