13
dfs
#include<stdio.h> #include<string.h> #include <string> #include <queue> #include <iostream> using namespace std; char map[103][103]; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int m,n,cnt; /*void dfs(int x,int y) { if (map[x][y]=='#') return ; map[x][y]='#'; cnt++; for (int i=0;i<4;i++) { int ax=x+dir[i][0]; int ay=y+dir[i][1]; if (ax<m&&ax>=0&&ay<n&ay>=0) dfs(ax,ay); } }*/ void dfs(int x,int y) { int i; for (i=0;i<4;i++) { int ax=x+dir[i][0]; int ay=y+dir[i][1]; if (ax<m&&ax>=0&&ay<n&&ay>=0&&map[ax][ay]!='#') { cnt++; map[ax][ay]='#'; dfs(ax,ay); } } } int main() { int i,j,px,py; while (~scanf("%d%d",&n,&m),m+n) { getchar(); for (i=0;i<m;i++) { for (j=0;j<n;j++) { scanf("%c",&map[i][j]); if (map[i][j]=='@') { px=i; py=j; } } getchar(); } cnt=1; map[px][py]='#'; dfs(px,py); printf("%d\n",cnt); } return 0; }bfs
#include<stdio.h> #include<string.h> #include <string> #include <queue> #include <iostream> using namespace std; char map[103][103]; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int m,n,cnt; typedef struct node{ int x,y; }node; void bfs(int x,int y) { queue<node> Q; node start,t1,t2; start.x=x,start.y=y; Q.push(start); while (!Q.empty()) { t1=Q.front(); Q.pop(); for (int i=0;i<4;i++) { int ax=t1.x+dir[i][0]; int ay=t1.y+dir[i][1]; if (ax<m&&ax>=0&&ay<n&&ay>=0&&map[ax][ay]!='#') { t2.x=ax,t2.y=ay; map[ax][ay]='#'; cnt++; Q.push(t2); } } } } int main() { int i,j,px,py; node s; while (~scanf("%d%d",&n,&m),m+n) { getchar(); for (i=0;i<m;i++) { for (j=0;j<n;j++) { scanf("%c",&map[i][j]); if (map[i][j]=='@') { px=i; py=j; map[px][py]='#'; } } getchar(); } cnt=1; bfs(px,py); printf("%d\n",cnt); } return 0; }