NEFU 561 方块计算
简单搜索题
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int n,m,sx,sy,ans; char data[33][33]; bool vis[33][33]; int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}}; void dfs(int i,int j) { if(vis[i][j]||i<0||j<0||i==n||j==m||data[i][j]!='.') return; //printf("%d %d ***\n",i,j); vis[i][j]=1;ans++; for(int k=0;k<4;k++) dfs(i+dir[k][0],j+dir[k][1]); } int main() { while(cin>>m>>n&&m&&n) { memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>data[i][j]; if(data[i][j]=='@') { sx=i; sy=j; data[i][j]='.'; } } //cout<<sx<<" "<<sy<<endl; ans=0; dfs(sx,sy); cout<<ans<<endl; } return 0; }