UVA572(Oil Deposits)(DFS)
2017-12-26 12:06
477 查看
题目链接
第一次做DFS的题目,还一次AC了,开心
这是最简单的DFS题目,我们老师和我们说DFS最精彩的地方应该是剪枝,因为DFS是要去走完整幅地图,效率还是很低的,要提高效率,就要适当剪枝,避免一些多余的步子,当然也不可过度剪枝,所以怎么剪枝还是要多想。
第一次做DFS的题目,还一次AC了,开心
#include<iostream> using namespace std; #define MAXN 105 char map[MAXN][MAXN]; int m,n; int dir[8][2] = { { 0,-1 },{ 0,1 },{ 1,0 },{ -1,0 },{-1,-1},{-1,1},{1,-1},{1,1} };//因为题目意思是斜着也算连通,所以定义八个方向 void dfs(int si, int sj) { if (si<0 || si>m || sj<0 || sj>n)return; for (int i = 0; i < 8; i++) { if (map[si + dir[i][0]][sj + dir[i][1]] == '@') { map[si + dir[i][0]][sj + dir[i][1]] ='*';//做过的地方就标记不能走 dfs(si + dir[i][0], sj + dir[i][1]);//递归把连通的地方都走一遍 } } return ; } int main() { while (cin >> m >> n&&n&&m) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) cin >> map[i][j]; int num = 0; //记录连通分量 for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (map[i][j] == '@') { dfs(i, j); num++; } cout << num << endl; } }
这是最简单的DFS题目,我们老师和我们说DFS最精彩的地方应该是剪枝,因为DFS是要去走完整幅地图,效率还是很低的,要提高效率,就要适当剪枝,避免一些多余的步子,当然也不可过度剪枝,所以怎么剪枝还是要多想。
相关文章推荐
- UVa 572 Oil Deposits(DFS)
- UVa - 572 - Oil Deposits(dfs求连通块)
- UVa 572/POJ 1562/HDU 1241 Oil Deposits(DFS,两种写法)
- UVa572 Oil Deposits(DFS)
- UVa 572 Oil Deposits(DFS)
- UVA572 Oil Deposits dfs
- UVa 572 Oil Deposits(DFS求8连通块)
- DFS求连通块 UVa 572 Oil Deposits
- HDU 1241/UVa572 Oil Deposits(DFS&BFS)
- UVA - 572 Oil Deposits(DFS和BFS两种解法)
- UVA - 572 - Oil Deposits (图的DFS!)
- UVa 572 - Oil Deposits(油田 dfs) 错的离谱的我
- UVA - 572 Oil Deposits(DFS)
- 经典第六章 例题 6-12 UVA 572 Oil Deposits(用DFS求连通块)
- Uva 572 - Oil Deposits(DFS)
- uva 572 Oil Deposits(油田)—— DFS
- 用DFS求连通块(油田Oil Deposits,UVa 572)
- UVa - 572 Oil Deposits ( DFS求连通块 )
- 【DFS】UVA - 572 Oil Deposits
- UVA 572 Oil Deposits(DFS)