POJ1321 棋盘问题 kaungbin-搜索入门-A
来源:互联网 发布:减员增效人员优化散文 编辑:程序博客网 时间:2024/05/21 17:58
题目链接:POJ1321
题目大意:
给你一个nxn的棋盘(有的位置空缺”.”,有的位置能放棋子“#”),要求你在棋盘能放棋子的地方放k个棋子,要求任意两个棋子,不能同行也不能同列,输出所有可能方案。
简单DFS,代码借鉴 原代码地址
因为本人刚刚接触这部分,所以对每一行代码加了注释,希望你能看懂- -
AC代码
/*2017年7月29日22:53:39 POJ1321 简单搜索 kuangbin专题一 A AC */#include<stdio.h>int n,k,ans;const int maxn=10;char pic[maxn][maxn];//记录棋盘 int col[maxn];//如果该列有棋子则置为1,否则为0 void dfs(int begin,int num){ for(int j=0;j<n;j++){ /* 满足放棋子的条件 当前棋盘可放&&当前列没有棋子 */ if(pic[begin][j]=='#'&&col[j]==0){ if(num==1)//如果走到当前位置,并且只剩下一个棋子没有落下的时候,答案+1 ans++; else{ //否则,将该位置放下棋子 col[j]=1; /* 从下一行开始递归 h 代表行号 h 的范围 为从当前行 往下在填充 num-1行 n-1-(num-1)+1=n-num+1 */ for(int h=begin+1;h<=n-num+1;h++){ dfs(h,num-1); } /* 如果走到这一步,证明已经从之前的递归跳回来 那么就将当前放下的棋子,拿走,即状态清空 */ col[j]=0; } } }}int main(){ while(scanf("%d%d",&n,&k)==2&&n!=-1){ ans=0; /*一行一行的读入数据 */ for(int i=0;i<n;i++){ scanf("%s",pic[i]); } /* 将每一列初始化为0 */ for(int i=0;i<n;i++){ col[i]=0; } /* 棋盘行号标记为0- n-1 从上往下,i从0 取到 n-k 因为如果i=n-k的时候,剩下的 n-1-(n-k)=k-1行 必须填满棋子,所以 i 的取值范围为【0,n-k】 */ for(int i=0;i<=n-k;i++){ dfs(i,k); } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- POJ1321 棋盘问题 kaungbin-搜索入门-A
- POJ1321棋盘问题【搜索】
- 棋盘问题(POJ1321)(A)
- 【搜索-DFS】POJ1321-棋盘问题
- 【简单搜索】POJ1321棋盘问题
- A - 棋盘问题 POJ1321 DFS
- POJ1321棋盘问题 搜索基础题
- [kuangbin带你飞]专题一 简单搜索 A - 棋盘问题 poj1321
- poj1321棋盘问题
- poj1321 棋盘问题
- poj1321(dfs棋盘问题)
- poj1321 - 棋盘问题
- poj1321棋盘问题
- POJ1321--棋盘问题
- POJ1321( 棋盘问题)
- POJ1321:棋盘问题
- poj1321 棋盘问题
- poj1321棋盘问题
- 发工资咯:)
- 《应用拆分与平台搭建最佳实践》- 怎么拆
- java常用设计模式
- 图片简单的滑动特效
- 从此使用vim代替si看代码
- POJ1321 棋盘问题 kaungbin-搜索入门-A
- Tomcat部署时war和war exploded区别
- MySQL开启慢查询日志时报Errcode: 13 的解决方法
- ccf 201312-3
- cc2541之Notification
- 绝对值排序
- HDU 1312 Red and Black
- 数据结构与算法专题之串——字符串及KMP算法
- 哈希算法的平均查找长度计算