深入优先算法
2015-12-07 17:18
281 查看
今天使用深入搜索算法,搜算关于一个水坑的问题。好久没有认真看看C++的书,在该问题上发现自己还有很多地方不熟悉了。比如C++中数组的传递应该写成 void dfs(int x,int y,char(&field)[N][M]) 其中[]的优先级比&要高,所以之前传值传递不行。
#include <iostream> using namespace std; #define N 10 #define M 12 //首先第一步将当前的地方设置为'.',其次检查所有的其他的地方看是不是符合要求,并进行递归调用 void dfs(int x,int y,char (&field) [M]){ field[x][y] = '.'; for (int i = -1; i < 2; ++i) { for (int j = -1; j < 2; ++j) { int nx=x+i,ny=y+j; if (0<=nx && nx <N && 0<=ny && ny<M && (field[nx][ny] == 'W') ) { dfs(nx,ny,field); } } } } int main(int argc, char const *argv[]) { char field [M] = { {'W','.','.','.','.','.','.','.','.','W','W','.'}, {'.','W','W','W','.','.','.','.','.','W','W','W'}, {'.','.','.','.','W','W','.','.','.','W','W','.'}, {'.','.','.','.','.','.','.','.','.','W','.','.'}, {'.','.','.','.','.','.','.','.','.','W','W','.'}, {'.','.','.','.','.','.','.','.','.','.','W','.'}, {'W','W','.','.','.','.','.','.','.','W','W','.'}, {'W','.','.','.','.','.','.','.','.','.','.','W'}, {'W','W','.','.','.','.','.','.','.','.','W','.'}, {'.','W','.','.','.','.','.','.','.','.','.','W'} }; int res = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { if (field[i][j]=='W') { dfs(i,j,field); res++; } } } cout<<res<<endl; cout<<"gfs is over!"<<endl; return 0; }另外的一种写法是:将field数组声明为全局变量:externchar field[N][M]
#include <iostream> using namespace std; #define N 10 #define M 12 extern char field [M] = { {'W','.','.','.','.','.','.','.','.','W','W','.'}, {'.','W','W','W','.','.','.','.','.','W','W','W'}, {'.','.','.','.','W','W','.','.','.','W','W','.'}, {'.','.','.','.','.','.','.','.','.','W','.','.'}, {'.','.','.','.','.','.','.','.','.','W','W','.'}, {'.','.','.','.','.','.','.','.','.','.','W','.'}, {'W','W','.','.','.','.','.','.','.','W','W','.'}, {'W','.','.','.','.','.','.','.','.','.','.','W'}, {'W','W','.','.','.','.','.','.','.','.','W','.'}, {'.','W','.','.','.','.','.','.','.','.','.','W'} }; //首先第一步将当前的地方设置为'.',其次检查所有的其他的地方看是不是符合要求,并进行递归调用 void dfs(int x,int y){ field[x][y] = '.'; for (int i = -1; i < 2; ++i) { for (int j = -1; j < 2; ++j) { int nx=x+i,ny=y+j; if (0<=nx && nx <N && 0<=ny && ny<M && (field[nx][ny] == 'W') ) { dfs(nx,ny); } } } } int main(int argc, char const *argv[]) { int res = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { if (field[i][j]=='W') { dfs(i,j); res++; } } } cout<<res<<endl; cout<<"gfs is over!"<<endl; return 0; }今天是第一天真正的开始思考关于算法的知识,现在在算法上面还是属于超级小白的阶段,但是好好加油,相信总有一天会更加的优秀的!来自为知笔记(Wiz)
相关文章推荐
- Daily Scrum - 12/07
- 查看系统信息的常用命令汇总
- 进程和线程关系及区别
- Android实现沉浸式通知栏,通知栏可以根据app的颜色可改变啦
- 第十五周项目--直接排序法
- GoEasy在web端推送及接收
- cocoa pods安装出错
- Java之枚举笔记(Enum)
- php连接postgresql
- 造轮子:千变万化的Div
- c++设计模式(2)--------简单工厂模式
- 第14周项目1(2) 验证分块查找算法
- Tvos多层图片的使用
- 第十五周实践项目2—用哈希法组织关键字
- java默认构造器constructor
- php-fpm 与 Nginx优化总结
- 工厂类理论复习
- 磁盘,卷,分区和驱动器的关系 基本磁盘-动态磁盘-GPT磁盘-MBR磁盘-RAID阵列磁盘的区别 资料整理
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- MongoDB操作数据库的几个命令(自己用)