3124 - 寻找MM

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

小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;
}