3124 - 寻找MM
小B和同学们一起在礼堂里准备排练节目——交际舞。小 B 发现自己还没有 mm 当舞伴呢。小 B 相当郁闷啊,自己如此玉树临风,潇洒倜傥居然没有 mm主动找自己..于是他便将找mm的任务交给你了.mm将自己的消息留在了礼堂的某些座 位,你需要尽可能搜集mm的信息,就可以知道哪位 mm 愿意做小B的舞伴了咯!
礼堂有n行,m 列个座位,我们将提供给你礼堂的俯视图。你当前的位置用@代替, “#” 为不可以经过的座位,因为这些座位坐了男生咯,他们可不愿意小B抱得美人归, “.”为 mm 留下信息的位置。也就是你可以经过的位置。你可以向上下左右四个方向走动。当然mm 留 下信息的位置你可以重复经过。 要求尽可能多的搜集mm 的信息。并且输出最多可以搜集到多少个信息。
题目输入
输入第一行 n,m。N和M<=20 (用空格隔开)
然后一个n*m的图。(保证没有空格)
题目输出
输出一行,为最多能够搜集到的信息。
输入/输出样例
题目输入
9 11 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ...........
题目输出
58
C++解答
#include<iostream> #include<string> #include<cstring> using namespace std; const int maxn=20+5; const int maxm=20+5; int n,m,ans; string map[maxn]; bool visited[maxn][maxm]; void search(int row,int col) { if(row<0 || row>=n || col<0 || col>=m || map[row][col]=='#' || visited[row][col]) return; visited[row][col]=true; ++ans; search(row-1,col); search(row+1,col); search(row,col-1); search(row,col+1); } int main() { int row,col,i,j; cin>>n>>m; for(i=0;i<n;i++){ cin>>map[i]; for(j=0;j<m;j++){ if(map[i][j]=='@'){ row=i; col=j; } } } //cout<<row<<" "<<col<<endl; memset(visited,false,sizeof(visited)); ans=0; //visited[row][col]=1; search(row,col); cout<<ans-1<<endl; return 0; }