题目地址:点击打开链接
思路:DFS
AC代码:
#include<iostream> using namespace std; int m,n; char lol[110][110]; int x[8]={-1,-1,-1,0,0,1,1,1}; int y[8]={-1,0,1,-1,1,-1,0,1}; void dfs(int a,int b) { lol[a][b]='*'; int i,newx,newy; for(i=0;i<8;i++) { newx=a+x[i]; newy=b+y[i]; if(lol[newx][newy]=='@' && newx<m && newy<n && newx>=0 && newy>=0) { dfs(newx,newy); } } } int main() { int i,j,sum; while(cin>>m>>n&&m) { sum=0; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cin>>lol[i][j]; } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(lol[i][j]=='@') { dfs(i,j); sum++; } } } cout<<sum<<endl; } return 0; }
AC代码2:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cstring> #include <climits> #include <cmath> #include <cctype> typedef long long ll; using namespace std; char map1[110][110]; int dir[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; int n,m; void dfs(int x,int y) { map1[x][y] = '*'; int i; for(i=0; i<8; i++) { int newx = x + dir[i][0]; int newy = y + dir[i][1]; if(newx >= 0 && newx < n && newy >= 0 && newy < m && map1[newx][newy] == '@') { dfs(newx,newy); } } } int main() { int i,j; while(scanf("%d%d",&n,&m)) { getchar(); int sum = 0; if(n == 0) break; for(i=0; i<n; i++) { //gets(map1[i]);用gets输入会错,不知道哪里错了 scanf("%s",map1[i]); } for(i=0; i<n; i++) { for(j=0; j<m; j++) { if(map1[i][j] == '@') { dfs(i,j); sum++; } } } printf("%d\n",sum); } return 0; }