poj 1979 搜尋

來源:互聯網
上載者:User
Red and Black
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 19263   Accepted: 10259

Description

There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles. 

Write a program to count the number of black tiles which he can reach by repeating the moves described above. 

Input

The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20. 

There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows. 

'.' - a black tile 
'#' - a red tile 
'@' - a man on a black tile(appears exactly once in a data set) 
The end of the input is indicated by a line consisting of two zeros. 

Output

For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

Sample Input

6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..#.......#..#########............11 6..#..#..#....#..#..#....#..#..###..#..#..#@...#..#..#....#..#..#..7 7..#.#....#.#..###.###...@...###.###..#.#....#.#..0 0

Sample Output

4559613

這是一道簡單的dfs,我手殘在忘記把檔案輸入的語句 給注釋了,結果就跪了。
下面是代碼:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace std;int dir[8][2]={{-1,0},{0,1},{1,0},{0,-1}};int w,h,ans;char map[30][30];void dfs(int x,int y){     if(x<0||x>=h||y<0||y>=w)         return;      for(int i=0;i!=4;++i){          int xx=x+dir[i][0];          int yy=y+dir[i][1];          if(map[xx][yy]=='.'){              map[xx][yy]='1';              dfs(xx,yy);          }      }      return;}int main(){     //freopen("input.txt","r",stdin);    // freopen("output.txt","w",stdout);     int sx,sy;    while(scanf("%d%d",&w,&h)!=EOF&&w&&h){         for(int i=0;i!=h;++i){             scanf("%s",map[i]);             for(int j=0;j!=w;++j){                   if(map[i][j]=='@'){                         sx=i;                         sy=j;                   }             }         }         map[sx][sy]='1';         ans=0;         dfs(sx,sy);         for(int i=0;i!=h;++i)            for(int j=0;j!=w;++j){                if(map[i][j]=='1')                    ++ans;            }          cout<<ans<<endl;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.