深度搜索,但是要注意搜索的方式:

本文给出两份代码,一份是AC代码,一份是超时的,你们感受下。

从第一行开始,对于每一行,搜索整行,如果有‘#’,标记,然后,则搜索下一行。

AC代码:

/*POJ1321
作者:陈佳润
2013-04-11
*/
#include<iostream>
#include<stdio.h>
using namespace std;int line[9];
int map[9][9];
int n;//棋盘大小
int m;//摆放棋子的数目
int allsum;//方案数void DFS(int row,int sum){if(sum==m){//如果满足要求,增加数量1,退出allsum++;return;}if(row>n) //防止越界return;for(int i=1;i<=n;i++){//对于行row,穷举每一列if(map[row][i]&&line[i]){line[i]=0;DFS(row+1,sum+1);line[i]=1;}}DFS(row+1,sum);
}int main(){int i,j;char c;//freopen("1.txt","r",stdin);while(cin>>n>>m&&(n!=-1&&m!=-1)){getchar();for(i=1;i<=n;i++){//读取,并转化成01矩阵for(j=1;j<=n;j++){scanf("%c",&c);if(c=='#')map[i][j]=1;elsemap[i][j]=0;}getchar();}//初始化allsum=0;for(i=1;i<=n;i++)line[i]=1;//深搜DFS(1,0);cout<<allsum<<endl;}return 0;
}

超时的代码:

/*POJ1321
作者:陈佳润
2013-04-11
*/
#include<iostream>
#include<stdio.h>
using namespace std;int n,m;
char map[9][9];
bool flag[9][9];
int row[9],line[9];//信号量
int allsum;void BFS(int i,int j,int sum){if(i==0||i>n||j==0||j>n)//越界return;if(flag[i][j]==false)//已经走过return;if(map[i][j]=='#'&&row[i]==0&&line[j]==0){//如果该位置可以flag[i][j]=false;row[i]++;line[j]++;sum++;if(sum==m){allsum++;sum--;row[i]--;line[j]--;}BFS(i,j+1,sum);BFS(i,j-1,sum);BFS(i+1,j,sum);BFS(i-1,j,sum);flag[i][j]=true;row[i]--;line[j]--;}else{//空白位置flag[i][j]=false;BFS(i,j+1,sum);BFS(i,j-1,sum);BFS(i+1,j,sum);BFS(i-1,j,sum);flag[i][j]=true;}
}int main(){int i,j;//freopen("1.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF&&(n!=-1||m!=-1)){getchar();for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%c",&map[i][j]);}getchar();}for(i=1;i<=n;i++){//初始化row[i]=0;line[i]=0;for(j=1;j<=n;j++)flag[i][j]=true;}allsum=0;BFS(1,1,0);printf("%d\n",allsum);
}
return 0;
}

转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/11/3015666.html

POJ1321 棋盘问题(DFS)相关推荐

  1. 【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】

    POJ1321棋盘问题 题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k ...

  2. 2015 百度之星 1003 棋盘占领 dfs

    棋盘占领 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_show ...

  3. POJ1321 棋盘问题

                                                                                            棋盘问题 Time Li ...

  4. POJ1321(棋盘问题)

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  5. poj1321棋盘问题

    题目链接 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...

  6. 深度优先搜索和广度优先搜索及典例分析(走迷宫问题(BFS)和棋盘问题(DFS))

    搜索算法在实际编程应用中起着举足轻重的作用,学会掌握搜索算法并熟练应用搜索算法来解决实际问题不得不说是一件相当COOL的事,所以我将深度搜索和广度搜索认真地做了详细的总结,与诸君共勉,也方便以后查阅复 ...

  7. pku 1321 棋盘问题 DFS

    http://poj.org/problem?id=1321 自己真是本了开始写了歌对于棋子有顺序的搜索,导致求出来是ans的阶乘种数了,因为k < n且不能在同一行同一列,只要按行搜索,记录列 ...

  8. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  9. kuangbin 专题一 简单搜索

    kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...

最新文章

  1. 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的...
  2. 比特币布道者Roger Ver是如何被污蔑成骗子的
  3. python控制结构(二)_Python程序控制结构---2
  4. python小游戏代码大全-【程序源代码】python贪吃蛇小游戏
  5. numpy and pandas
  6. PTA 1002 Business (35分)
  7. 字典转模型的过程中,空值和id特殊字符的处理
  8. 对于半结构化数据的讲解,这可能是最通俗易懂的一篇文章了
  9. 看新排美国话剧《哗变》
  10. 解析Windows 2000/XP进程工作集
  11. LSSS线性秘密共享方案详细构造方法与原理解释试读
  12. rails db 查询优化_如何优化查询以解决Rails中常见的可伸缩性瓶颈
  13. 如何利用 JConsole观察分析Java程序的运行,进行排错调优(转)
  14. Serf:Gossip Protocol
  15. SCPPO(二十二):读取配置文件---程序猿必不可少的技能
  16. day02.2-常用Linux命令整理
  17. Android 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore
  18. 2017微软校园招聘笔试题
  19. windows删除鼠标右键下新建的项目
  20. 单点登录(Single Sign On)解决方案

热门文章

  1. 网络营销——营销型网站如何在网络营销大环境中展开宣传与推广
  2. python 整合excel_Python将多个excel文件合并为一个文件
  3. 怎么把照片做成立方体在html播放,立方体照片.html
  4. (转载)android如何在style文件中使用自定义属性
  5. KD树——k=1时就是BST,里面的数学原理还是有不明白的地方,为啥方差划分?...
  6. java中volatile
  7. Core篇——初探Core的认证,授权机制
  8. 字符串操作:索引位置、去空格、替换字符串
  9. java静态代理与动态代理简单分析
  10. Fiddler 抓取eclipse中的请求