博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1321 棋盘问题
阅读量:6815 次
发布时间:2019-06-26

本文共 649 字,大约阅读时间需要 2 分钟。

问题链接:。

问题简述参见上述链接。

问题分析二维数组里,只有放置"#"的地方才算是棋盘,可以放置棋子。"#"表示棋盘区域,"."表示空白区域。

对于n*n的区域,只放置k个棋子,并且k<=n。而且各个棋子不能放在同一行和同一列里。

虽然说这个题有点像八皇后问题,但是还是有所不同的。问题用DFS方法来解决。 

程序说明程序中,对于访问过的列,使用数组visit[]来记录,visit[i]=1表示第i列已经有棋子,visit[i]=0表示第i列还没有棋子。

这个问题的关键是k<n的情形,需要正确处理。当k<n,那么第一个棋子就可以放在第0行到第n-k行;在DFS过程中,第i个棋子可以按行顺序放,也可以跳过一行到n-k行。调用函数dfs()前的循环控制就是考虑这种情形。

AC通过的C语言程序如下:

/* POJ1321 棋盘问题 */#include 
#include
#define MAXN 8char grid[MAXN][MAXN];int visit[MAXN];int maxplan;int n, k, count;// DFS:试探row行,col列void dfs(int row){ int i, j; if(row >= n) return; for(i=0; i

转载于:https://www.cnblogs.com/tigerisland/p/7564619.html

你可能感兴趣的文章
网管工作是否值得做下去?
查看>>
神行者PD10-adb push逃脱ro权限
查看>>
JPA(四)之实体关系一对一
查看>>
如何使用羊驼自动生成缩略图的功能。
查看>>
定制化Azure站点Java运行环境(1)
查看>>
inotify用法简介及结合rsync实现主机间的文件实时同步
查看>>
php 判断手机登陆
查看>>
git 问题
查看>>
Fedora18设置终端快捷键 和 桌面快捷方式
查看>>
取消NavigationBar左右两边的空隙
查看>>
Ubuntu 12.04 Gedit中文乱码解决办法
查看>>
修改symfony sfDoctrineGuardPlugin验证密码的方法
查看>>
Vbird的Linux私房菜学习笔记之正则表达式-特殊字符
查看>>
数据的作用域
查看>>
js中括号用于自执行测试
查看>>
ssh 公钥 密钥
查看>>
c#设计模式-单例模式
查看>>
Ehcache web cahce 缓存改良版
查看>>
F5集群配置公共irule,解决X-Frame-Options漏洞及host头漏洞
查看>>
mysql 创建日期列之timestamp
查看>>