poj2386,广搜,深搜
2015-12-28 21:01
260 查看
poj2386是一道非常适合练习搜索的题目,下面广搜和深搜的代码如下:
广搜:
深搜
广搜:
#include <iostream> #include <queue> #include <string.h> using namespace std; int xx[8][2] = {{0,1},{0,-1},{-1,0},{1,0},{1,1},{1,-1},{-1,-1},{-1,1}}; char s[105][105]; int n,m; struct sa { int x,y; } t,a; void bfs(int x,int y) { queue<sa>q; s[x][y]='.'; t.x=x; t.y=y; q.push(t); while(!q.empty()) { t=q.front(); q.pop(); for(int i=0; i<8; i++) { int x1=t.x+xx[i][0]; int y1=t.y+xx[i][1]; if(x1>=0&&x1<n&&y1>=0&&y1<m&&s[x1][y1]=='W') { s[x1][y1]='.'; a.x=x1; a.y=y1; q.push(a); } } } } int main() { while(cin>>n>>m) { int sum=0; memset(s,0,sizeof(s)); for(int i=0; i<n; i++) for(int j=0; j<m; j++) cin>>s[i][j]; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(s[i][j]=='W') { bfs(i,j); sum++; } } cout<<sum<<endl; } return 0; }
深搜
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; char s[105][105]; int n,m; void dfs(int x,int y) { s[x][y]='.'; for(int dx=-1; dx<=1; dx++) for(int dy=-1; dy<=1; dy++) { int nx=dx+x; int ny=dy+y; if(nx>=0&&nx<n&&ny>=0&&ny<m&&s[nx][ny]=='W') { dfs(nx,ny); } } } int main() { while(cin>>n>>m) { memset(s,0,sizeof(s)); int sum=0; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { //scanf("%c",&s[i][j]); cin>>s[i][j]; } for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(s[i][j]=='W') { dfs(i,j); sum++; } } cout<<sum<<endl; } return 0; }
相关文章推荐
- Windows下OpenCV+QT开发环境配置
- 关系型数据库管理系统简介
- 关于垃圾回收
- 写论文自动生成参考文献的方法
- Netty启动分析
- 一小时快速理解git版本控制工具SourceTree
- 使用sudo执行命令的时候提示找不到命令
- 流水灯
- #3等保工具箱
- 开始意外的dsp之旅
- iOS小demo之判断颜色深浅
- http学习01
- 把复杂变简单,能产生颠覆的力量
- C#类中属性的定义
- java axis调用WebService 服务端,客户端
- listView顶部偏移
- [MySQL]Ubuntu下解决中文乱码问题
- iOS小demo之获取图片透明度
- 使用 AngularJS 和 Electron 构建桌面应用
- Scala构建工具(SBT)教程