题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312
题目大意:给出一张地图,如果是“.”则可通行,若为“#”不能通行,“@”为起点,求能走过的点的个数(@也算)
解题思路:dfs,但一定要记得在访问之后修改地图的状态,否则会反复访问,陷入死循环,第一次就这样搞坏了…………
AC代码:
#include <iostream> using namespace std; char map[25][25]; int dir[4][2] = {0,1,-1,0,0,-1,1,0}; int cnt; int w,h; void dfs(int x,int y) { cnt++; map[x][y] = '#'; // cout<<cnt<<endl; // int nx,ny; for(int i=0;i<4;i++) { int nx = x+dir[i][0]; int ny = y+dir[i][1]; // cout<<"xy"<<x<<" "<<y<<endl; // cout<<"nxny"<<nx<<" "<<ny<<endl; // cout<<map[nx][ny]<<endl; if(map[nx][ny]=='.'&&nx>=0&&nx<h&&ny>=0&&ny<w) { dfs(nx,ny); } } return; } int main() { int x,y; while(cin>>w>>h) { cnt=0; if(w==0&&h==0)break; for(int i=0;i<h;i++) { for(int j=0;j<w;j++) { cin>>map[i][j]; if(map[i][j]=='@') { x = i; y = j; } } } dfs(x,y); cout<<cnt<<endl; } return 0; }