题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1241
又是经典搜索题!还是那句话,数据量小,要求简单,果断DFS!
这道题目跟以前的题目稍微有点不一样的是方向有点变化,由原来的四方向变成了八个方向,其实是一样的
只不过是在遍历的时候多几个而已,直接给出代码
#include <iostream> #include<string.h> using namespace std; #define N 101 int m,n; int dirctions[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; int visited[N][N]; char map[N][N]; int sum=0; void DFS(int x,int y) { int nx,ny; for(int i=0;i<8;i++) { nx=x+dirctions[i][0]; ny=y+dirctions[i][1]; if(map[nx][ny]=='@'&&nx>=0&&nx<m&&ny>=0&&ny<n&&visited[nx][ny]==0) { visited[nx][ny]=1; DFS(nx,ny); } } } int main() { int i,j; while(cin>>m>>n) { if(m==0||n==0) break; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>map[i][j]; memset(visited,0,sizeof(visited)); sum=0; for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(map[i][j]=='*'||visited[i][j]==1) continue; visited[i][j]=1; DFS(i,j); sum++; } } cout<<sum<<endl; } return 0; }