题目链接:https://vjudge.net/problem/HDU-5706
题意:输入一个N*M的图,判断里面有多少个连续的Girl和cat,可以沿上下左右四个方向。
直接DFS或BFS就行。
#include<bits/stdc++.h> #define maxn 1000010 #define LL long long using namespace std; int dx[4]={-1,0,1,0}; int dy[4]={0,-1,0,1}; char mp[1010][1010]; int ans1=0,ans2=0; int n,m; void dfs1(int x,int y) { if(mp[x][y]=='l') { ans1++; return ; } for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx<0||nx>=n||ny<0||ny>=m) continue; if(mp[x][y]=='g'&&mp[nx][ny]=='i') { dfs1(nx,ny); } if(mp[x][y]=='i'&&mp[nx][ny]=='r') { dfs1(nx,ny); } if(mp[x][y]=='r'&&mp[nx][ny]=='l') { dfs1(nx,ny); } } } void dfs2(int x,int y) { if(mp[x][y]=='t') { ans2++; return ; } for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx<0||nx>=n||ny<0||ny>=m) continue; if(mp[x][y]=='c'&&mp[nx][ny]=='a') { dfs2(nx,ny); } if(mp[x][y]=='a'&&mp[nx][ny]=='t') { dfs2(nx,ny); } } } int main() { int T; while(cin>>T) { while(T--) { cin>>n>>m; ans1=0,ans2=0; for(int i=0;i<n;i++) { cin>>mp[i]; } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(mp[i][j]=='g') dfs1(i,j); if(mp[i][j]=='c') dfs2(i,j); } } cout<<ans1<<' '<<ans2<<endl; } } return 0; }