水题直接水
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <vector> #include <cmath> #include <vector> #include <bitset> #include <bitset> #include <ctime> using namespace std; #define LL long long #define SZ(v) ((int)(v).size()) #define FOR(i,st,ed) for((i)=(st);(i)!=(ed);++(i)) #define REP(i,ed) FOR(i,0,ed) #define FORE(i,a,b) for(int i=(a);i<=(b);++i) #define REPE(i,n) FORE(i,0,n) #define FORSZ(i,a,v) FOR(i,a,SZ(v)) #define REPSZ(i,v) REP(i,SZ(v)) void nextInt(int &x) { scanf("%d", &x); } void nextInt(int &x, int &y) { scanf("%d%d", &x, &y); } char g[30][30]; int nowx, nowy; int n, m; void init() { memset(g,0,sizeof(g)); int i,j; swap(n,m); REP (i,n) { REP(j, m) { //char ch = getchar(); g[i][j] = getchar(); if (g[i][j] == '@') { nowx=i; nowy=j; } } getchar(); } } int ans = 0; const int dx[]={0,0,-1,1}; const int dy[]={1,-1,0,0}; void dfs(int nx, int ny) { g[nx][ny] = '#'; ++ans; int i; REP(i,4) { int wx = nx + dx[i]; int wy = ny + dy[i]; if (g[wx][wy]!='.') continue; dfs(wx,wy); } } void doit() { ans = 0; dfs(nowx, nowy); printf("%d\n", ans); } int main() { double begin = clock(); while (~scanf("%d %d",&n, &m)) { if (!n && !m) break; getchar(); init(); doit(); } //cout << (clock()-begin)/1000 << endl; } /* 3 5 0.547173 843749 1 0.5 500000 3 0.75 600000 */