4 条题解
-
0
岛屿的个数
这题用dfs染色法的思想,可以很快解决,简单来说,就是每次进入dfs时,都把周围的陆地都染色,这样保证了每次进入的都是一个新岛屿 代码如下:
#include<bits/stdc++.h> using namespace std; const int N=505; int n,mp[N][N],ans; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; bool check(int x,int y){ return (x>=1&&x<=n&&y>=1&&y<=n&&mp[x][y]==1); } void dfs(int x,int y){ mp[x][y]=2; for(int i=0;i<4;i++){ int cur_x=x+dx[i],cur_y=y+dy[i]; if(check(cur_x,cur_y)){ dfs(cur_x,cur_y); } } } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>mp[i][j]; } } //dfs染色法 for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(mp[i][j]==1){ dfs(i,j); ans++; } } } cout<<ans; return 0; }学会了可以试试岛屿个数这道题,也可以用染色法的思想解决~
信息
- ID
- 33
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 33
- 已通过
- 19
- 上传者