aoj0118
一、题意:有三种水果分别用,'@','*','#'三种符号表示,上下左右相连的同种水果被看做是一个区域,问一共有多少个区域
二、思路:用dfs去标记相连区域,然后遍历每个没有被标记的位置进行dfs
三、代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include"iostream" #include"stdio.h" #include"vector" using namespace std; const int MAXN=105; char farm[MAXN][MAXN]; int m,n,cnt; bool IsEdge( int x, int y) { if (x>=0&&x<m&&y>=0&&y<n) return true ; return false ; } bool IsSame( int x, int y, char tree) { if (farm[x][y]==tree) return true ; return false ; } void Dfs( int x, int y, char tree) { int dir[]={0,1,0,-1,-1,0,1,0}; for ( int i=0;i<8;i+=2) { int dx=x+dir[i]; int dy=y+dir[i+1]; if (IsEdge(dx,dy)&&IsSame(dx,dy,tree)) { farm[dx][dy]= '-' ; Dfs(dx,dy,tree); } } } int main() { while (cin>>m>>n,m&&n) { for ( int i=0;i<m;i++) { cin>>farm[i]; } cnt=0; for ( int i=0;i<m;i++) { for ( int j=0;j<n;j++) { if (farm[i][j]!= '-' ) { cnt++; char tree=farm[i][j]; farm[i][j]= '-' ; Dfs(i,j,tree); } } } cout<<cnt<<endl; } return 0; } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步