题目要求:赤裸裸的搜索。 搜索方向:上下左右。 没优化的代码: #include <iostream> using namespace std; int m,n; char map[101][101]; void dfs(int a,int b) { int i,j; map[a][b] = '*'; for(i = -1 ; i < 2 ; i++) for(j = -1 ; j < 2 ; j++) { if(a+i >=0 && a+i <m && b+j >=0 && b+j<n) if(map[a+i][b+j] == '@') dfs(a+i,b+j); } } int main() { int i,j; int output; while(cin>>m>>n,m+n) { output = 0; for(i = 0 ; i < m ; i++) for(j = 0 ; j < n ; j++) cin>>map[i][j]; for(i = 0 ; i < m ; i++) for(j = 0 ; j < n ; j++) { if(map[i][j] == '@') { dfs(i,j); output++; } } cout<<output<<endl; } }