八皇后问题
来源:互联网 发布:网络诈骗主题班会记录 编辑:程序博客网 时间:2024/05/22 15:50
算法思路:
1.初始化: i=1
2.初始化: j=1
3.从第一行开始,恢复j的当前值,判断低j个位置
a.位置j可放入皇后,标记位置(i,j),i++,转步骤2
b.位置j不可放入皇后,j++,转步骤a
c.当j>8时,i--,转步骤3
4.结束:
第8行有位置可放入皇后
#include<stdio.h>#define N 8/*模拟棋盘,加2为了判定边界*/static char board[N + 2][N + 2];static int count = 0;/*定义的偏移量*/typedef struct _tag_pos{int ios;int jos;}Pos;static Pos pos[] = { {-1,-1},{-1,0},{-1,1}};void display(){int i = 0;int j = 0;for (i = 0; i < N + 2; i++){for (j = 0; j < N + 2; j++){printf("%c", board[i][j]);}printf("\n");}}int check(int i ,int j){int ret = 1;int p = 0;for (p = 0; p < 3; p++){int ni = i;int nj = j;while ((ret) && (board[ni][nj] != '#')){ni = ni + pos[p].ios;nj = nj + pos[p].jos;ret = ret && (board[ni][nj] != '*');}}return ret;}void find(int i){int j = 0;if (i > N){count++;printf("Soulution %d\n",count);display();getchar();}else{for (j = 1; j <= N; j++){if (check(i, j)){board[i][j] = '*';find(i + 1);board[i][j] = ' ';}}}}/*初始化化棋盘*/void init(){int i = 0;int j = 0;for (i = 0; i < N + 2; i++){board[0][i] = '#';board[N + 1][i] = '#';board[i][0] = '#';board[i][N+1] = '#';}for (i = 1; i < N; i++){for (j = 1; j <= N; j++){board[i][j] = ' ';}} }int main(){init();find(1);return 0;}
0 0
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题(2)
- 八皇后问题(3)
- 八皇后问题
- 八皇后问题程序
- 浅谈八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题求解
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 顺序串的实现(插入、截取、匹配)
- PHP原生态记录Log函数
- mfc 单文档显示当前系统时间
- 分数修改
- 使用afinal框架实现简单的下载
- 八皇后问题
- 学习YAML
- JavaScript 中判断对象的类型
- Show me the code之Python练习册 Q11~12 关键词过滤
- SQL的插入语句insert
- AS主题+配置备份+Logcat颜色配置
- 使用chrome的xpath工具
- android studio api 23 android 6.0 requires android.permission.READ_CONTACTS or android.permiss
- 管道