杭电ACM1312(dfs)

来源:互联网 发布:中科院外籍院士知乎 编辑:程序博客网 时间:2024/04/28 23:54

题目链接: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;}


0 0