【Acm】八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。
其解决办法和我以前发过的【算法之美—Fire Net:www.cnblogs.com/lcw/p/3159414.html】类似
题目:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
#include <stdio.h> int count = ; //全局变量,统计所有解法 int notDanger( int row, int j, int (*chess)[] ) //判断是否存在危险
{
int i, k, flag1=, flag2=, flag3=, flag4=, flag5=; // 判断列方向
for( i=; i < ; i++ )
{
if( *(*(chess+i)+j) != )
{
flag1 = ;
break;
}
} // 判断左上方
for( i=row, k=j; i>= && k>=; i--, k-- )
{
if( *(*(chess+i)+k) != )
{
flag2 = ;
break;
}
} // 判断右下方
for( i=row, k=j; i< && k<; i++, k++ )
{
if( *(*(chess+i)+k) != )
{
flag3 = ;
break;
}
} // 判断左下方
for( i=row, k=j; i>= && k<; i--, k++ )
{
if( *(*(chess+i)+k) != )
{
flag4 = ;
break;
}
} // 判断右上方
for( i=row, k=j; i< && k>=; i++, k-- )
{
if( *(*(chess+i)+k) != )
{
flag5 = ;
break;
}
} if( flag1 || flag2 || flag3 || flag4 || flag5 )
{
return ;
}
else
{
return ;
}
} // 参数 row:表示起始行
// 参数 n:表示列数
// 参数 (*chess)[8]: 表示指向棋盘每一行的指针
void EightQueen( int row, int n, int (*chess)[] )
{
int chess2[][], i, j; for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
chess2[i][j] = chess[i][j];
}
} if( == row ) //本次解法完毕
{
printf("第 %d 种 \n", count+);
for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
printf("%d ", *(*(chess2+i)+j));
}
printf("\n");
}
printf("\n");
count++;
}
else
{
for( j=; j < n; j++ )
{
if( notDanger( row, j, chess ) ) // 判断这个位置是否存在危险
{
for( i=; i < ; i++ )
{
*(*(chess2+row)+i) = ;
} *(*(chess2+row)+j) = ; EightQueen( row+, n, chess2 ); //没有危险,继续往下
}
}
}
} int main()
{
freopen( "output.txt", "w", stdout ); //将输出结果保存到 output.txt中 int chess[][], i, j; for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
chess[i][j] = ;
}
} EightQueen( , , chess ); printf("总共有 %d 种解决方法 \n\n", count); fclose(stdout);
return ;
}
【Acm】八皇后问题的更多相关文章
- ACM:回溯,八皇后问题,素数环
(一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- Python解决八皇后问题
最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...
- OpenJudge1700:八皇后问题 //不属于基本法的基本玩意
1700:八皇后问题//搜索 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...
- C#八皇后问题 枚举值
记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...
- 八皇后(dfs+回溯)
重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
随机推荐
- 老男孩linux实战培训初级班第二次课前考试题
################################################################ 本文内容摘录于老男孩linux实战运维培训中心课前考试题(答案部分) ...
- 信号之sigsetjmp和siglongjmp函数(转)
在信号处理程序中经常调用longjmp函数以返回到程序的主循环中,而不是从该处理程序返回. 但是,调用longjmp有一个问题.当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号 ...
- 微信公众平台HTTPS方式调用配置免费https服务器
微信公众平台数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用.避免影响正常使用中含有HTTP方式调用的服务,请开发者尽快调整,将现有通过HTTP方式调用的切换成HTTPS调用,平台将于 ...
- SQL SERVER 2008自动发送邮件(完整版)
这两天都在搞这个东西,从开始的一点不懂,到现在自己可以独立的完成这个功能!在这个过程中,CSDN的好多牛人都给了我很大的帮助,在此表示十二分的感谢!写这篇文章,一是为了巩固一下,二嘛我也很希望我写的这 ...
- LINUX-iostat命令讲解
语法如下:iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]-c为汇报CPU的使用情况:- ...
- C++的std::string的“读时也拷贝”技术!
C++的std::string的读时也拷贝技术! 嘿嘿,你没有看错,我也没有写错,是读时也拷贝技术.什么?我的错,你之前听说写过时才拷贝,嗯,不错的确有这门技术,英文是Copy On Write,简写 ...
- 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT
近期项目除了一个问题,场景大概是这种,项目在国外开发.在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数. 所以项目在国外的server上能够正常执行.但是在国内的 ...
- STVD中将现有工程重命名为另一个工程
http://blog.csdn.net/sy_lixiang/article/details/47273649 例子:把工程名为Template的工程改为color,把左边红圈部分重命名为右面的名字 ...
- 怎么在eclipse中查到这个类用的是哪个jar的类和Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
找到了一个办法,你先按F3,然后点击Change Attached Source..按钮,在弹出的框里有个路径,我的路径是D:/SNFWorkSpace/JAR/~importu9.jar,然后你去引 ...
- Latex中如何设置字体颜色(3种方式)
Latex中如何设置字体颜色(三种方式) 1.直接使用定义好的颜色 \usepackage{color} \textcolor{red/blue/green/black/white/cyan/ma ...