Red and Black (POJ 1979,深度优先搜索)

来源:互联网 发布:ip地址显示杭州阿里云 编辑:程序博客网 时间:2024/06/06 03:13

题目链接

       这道题和前面的例题Lake Couting十分相似。只需判断四个方向上是否为'.',若为'.',移动过去并将这个'.'改为'#',移动的次数加一即为答案。本题比较简单,就不多说了。

#include <cstdio>const int MAX_W = 20;const int MAX_H = 20;int W, H;char t[MAX_W][MAX_H];int dx[4] = {-1,1,0,0};int dy[4] = {0,0,1,-1};int res;void dfs(int i,int j)//对四个方向判断,若为'.',移动,计数器+1,并将'.'改为'#'  {for(int k=0; k<4; k++){int y = i+dx[k];int x = j+dy[k]; if(0<=x && x<W && 0<=y && y<H && t[y][x] == '.'){res++;t[y][x] = '#';dfs(i+dx[k], j+dy[k]);}}return ;}int main(){while(scanf("%d%d", &W, &H)==2 && W!=0){res = 1;for(int i=0; i<H; i++){for(int j=0; j<W; j++){scanf(" %c", &t[i][j]);}}for(int i=0; i<H; i++){for(int j=0; j<W; j++){if(t[i][j] == '@'){dfs(i, j);break;}}}printf("%d\n",res);} return 0;}


阅读全文
0 0
原创粉丝点击