【Codeforces 723D】Lakes in Berland (dfs)
2016-10-04 01:32
465 查看
海洋包围的小岛,岛内的有湖,'.'代表水,'*'代表陆地,给出的n*m的地图里至少有k个湖,求填掉面积尽量少的水,使得湖的数量正好为k。
dfs找出所有水联通块,判断一下是否是湖(海水区非湖)。将湖按面积排序,若湖的数量为cnt,填掉前cnt-k个湖。
http://codeforces.com/problemset/problem/723/D
Examples
input
output
input
output
dfs找出所有水联通块,判断一下是否是湖(海水区非湖)。将湖按面积排序,若湖的数量为cnt,填掉前cnt-k个湖。
http://codeforces.com/problemset/problem/723/D
Examples
input
5 4 1 **** *..* **** **.* ..**
output
1 **** *..* **** **** ..**
input
3 3 0 *** *.* ***
output
1 *** *** ***
#include<bits/stdc++.h> using namespace std; int n,m,k; char a[55][55]; bool vis[55][55]; int dx[6]={0,0,1,-1}; int dy[6]={1,-1,0,0}; int num,cnt,islake; int ans; struct lake{ int x,y; int num; int id; }lk[3600]; bool cmp(lake a,lake b){ return a.num<b.num; } void dfs(int x,int y){ vis[x][y]=1; num++; if(x==0||x==n-1||y==0||y==m-1)islake=0; for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i]; if(nx>=0&&nx<n&&ny<m&&ny>=0&&a[nx][ny]=='.'&&!vis[nx][ny]) dfs(nx,ny); } } void fil(int x,int y,int id){ vis[x][y]=1; ans++; a[x][y]='*'; for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i]; if(nx>=0&&nx<n&&ny<m&&ny>=0&&a[nx][ny]=='.'&&!vis[nx][ny]) fil(nx,ny,id); } } int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=0;i<n;i++) scanf(" %s",a[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(!vis[i][j]&&a[i][j]=='.'){ num=0; islake=1; dfs(i,j); if(islake)lk[cnt++]=(lake){i,j,num,cnt}; } memset(vis,0,sizeof vis); sort(lk,lk+cnt,cmp); for(int l=0;l<cnt-k;l++) for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(i==lk[l].x&&j==lk[l].y) fil(i,j,lk[l].id); printf("%d\n",ans); for(int i=0;i<n;i++) printf("%s\n",a[i]); }
相关文章推荐
- 【codeforces 723D】【DFS (Floodfill)】D. Lakes in Berland【把多于k的连通块填起来,最外面的连通块直接忽视】
- CodeForces 723D-Lakes in Berland(BFS DFS)
- codeforces723D-Lakes in Berland-DFS
- codeforces 723D: Lakes in Berland
- 【29.70%】【codeforces 723D】Lakes in Berland
- CodeForces - 723D - D. Lakes in Berland
- codeforces#375(div.2)723D - Lakes in Berland dfs+bfs
- codeforces723D Lakes in Berland 搜索
- Codeforces 723D - Lakes in Berland
- codeforces 723 D. Lakes in Berland
- D.Lakes in Berland(DFS)
- D. Lakes in Berland(dfs好题)
- 【Codeforces Round 375 (Div 2) D】【简单dfs】Lakes in Berland
- Codeforces Round #375 (Div. 2) D - Lakes in Berland (dfs)
- 【Codeforces-723D】Lake in Berland
- Codeforeces - 723D -Lakes in Berland
- D. Lakes in Berland 【dfs+贪心】
- CodeForces 25C Roads in Berland【floyd过】
- CodeForces 598 D. Igor In the Museum(dfs)
- codeforces_598D. Igor In the Museum(dfs)