poj 1979 dfs
题意:
给你一个row*col的矩阵,上面的'#'代表你不能走的地方,'.'表示你能走的地方,'@'表示你的起点,问你最多能走多少格。
思路:
dfs的简单变形。只要记录下搜过的个数,便是他能走的格数。
#include<iostream> using namespace std; const int Max= 22; int row, col, ans; bool map[Max][Max], vis[Max][Max]; int dir[4][2] = {{0,1},{-1,0},{0,-1},{1,0}}; bool inmap(int r,int c) { if(r>=1&&c>=1&&r<=row&&c<=col) return true; return false; } void dfs(int now_r, int now_c){ for(int i = 0; i < 4; i ++){ int r = now_r + dir[i][0]; int c = now_c + dir[i][1]; if(inmap(r, c) && !vis[r][c] && map[r][c]){ vis[r][c] = true; // dfs的简单变形,直接记录搜过的个数。 ans ++; dfs(r, c); } } } int main(){ int i, j, sta_r, sta_c; while(1){ cin >> col >> row; if(row == 0 && col == 0) break; for(i = 1; i <= row; i ++) for(j = 1; j <= col; j ++){ char c; cin >> c; if(c == '.') map[i][j] = true; else if(c == '#') map[i][j] = false; else { map[i][j] = true; sta_r = i; sta_c = j; } } memset(vis, false, sizeof(vis)); vis[sta_r][sta_c] = true; ans = 1; dfs(sta_r, sta_c); cout << ans << endl; } return 0; }
另解:http://www.cnblogs.com/hxsyl/archive/2012/08/15/2640997.html
作者:sam
出处:http://www.cnblogs.com/samjustin/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。