D. Lakes in Berland 【dfs+贪心】
来源:互联网 发布:帆布鞋淘宝描述 编辑:程序博客网 时间:2024/06/08 16:29
题目链接
题意:
给你一个n*m的矩阵,然后你们有不少于k条河流,然后你需要使得一些河流变成陆地,使得剩余河流的数量恰好等于k,问你至少填多少个‘ . ’。河流的定义是不与外界相连的’ . ‘,处于边界的’ . ‘属于海洋部分。
思路:
dfs和bfs都行,介绍一下dfs写法吧。先遍历一遍找出满足条件的湖泊,并用结构体记录此湖泊的起点终点和面积,然后根据面积排序,把需要填充的湖的面积相加,把填充的湖的符号更新一遍输出;
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define max_n 110typedef long long LL;using namespace std;char mapp[max_n][max_n];int vis[max_n][max_n];int mov[4][2]={0,1,0,-1,1,0,-1,0};int res=0,n,m;bool flag;struct node{ int a; int b; int c;}s[max_n*100]; //注意范围,开大点void dfs(int x,int y){ if(mapp[x][y]=='*') return; vis[x][y]=1; if(x==1 || y==1 || x==n || y==m) flag=false; for(int i=0;i<4;i++) { int fx=x+mov[i][0]; int fy=y+mov[i][1]; if(fx>=1 && fx<=n && fy>=1 && fy<=m && mapp[fx][fy]=='.' && !vis[fx][fy]) { if(fx==1 || fy==1 || fx==n || fy==m) flag=false; vis[fx][fy]=1; res++; dfs(fx,fy); } } return;}void dfs2(int x,int y){ mapp[x][y]='*'; for(int i=0;i<4;i++) { int fx=x+mov[i][0]; int fy=y+mov[i][1]; if(fx>=1 && fx<=n && fy>=1 && fy<=m && mapp[fx][fy]=='.') { mapp[fx][fy]='*'; dfs2(fx,fy); } } return;}bool cmp(node x,node y){ return x.c<y.c;}int main(){ int k,cnt=0; memset(vis,0,sizeof(vis)); memset(s,0,sizeof(s)); scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=n;i++) { getchar(); for(int j=1;j<=m;j++) { scanf("%c",&mapp[i][j]); } } if(n==1 || n==2 || m==1 || m==2) //特判一下 { printf("0\n"); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%c",mapp[i][j]); } printf("\n"); } return 0; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(mapp[i][j]=='.' && !vis[i][j]) { flag=true; res=1; dfs(i,j); if(flag) //有效的湖泊 { s[cnt].a=i; s[cnt].b=j; s[cnt].c=res; cnt++; } } } } int sum=0; sort(s,s+cnt,cmp); for(int i=0;i<cnt-k;i++) { int nx=s[i].a; int ny=s[i].b; sum+=s[i].c; dfs2(nx,ny); } printf("%d\n",sum); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%c",mapp[i][j]); } printf("\n"); } return 0;}
阅读全文
1 0
- D. Lakes in Berland 【dfs+贪心】
- D.Lakes in Berland(DFS)
- codeforces 723D. Lakes in Berland [DFS]【】
- CodeForces 723D Lakes in Berland DFS
- D. Lakes in Berland
- D. Lakes in Berland
- Codeforces Round #375 (Div. 2) D. Lakes in Berland __ dfs+贪心+小根堆
- [codeforces] D. Lakes in Berland [dfs and similar]
- codeforce 723d Lakes in Berland(暴力DFS)
- CodeForces 723D-Lakes in Berland(BFS DFS)
- D. Lakes in Berland(dfs好题)
- Codeforces-723D- Lakes in Berland(DFS)
- Codeforces Round #375 (Div. 2) D. Lakes in Berland 贪心
- codeforces723D-Lakes in Berland-DFS
- Codeforces373D-Lakes in Berland(dfs)
- codeforces723D.Lakes in Berland(dfs)
- Codeforces723 D. Lakes in Berland (BFS)
- 【29.70%】【codeforces 723D】Lakes in Berland
- Menu的使用
- Button的使用
- BAT 人工智能实验室大起底:都叫AI Lab,三巨头究竟有什么不同
- PAT1004. 成绩排名
- ios-截图
- D. Lakes in Berland 【dfs+贪心】
- 导入HttpPost包
- Networking
- 每个前端开发者必会的 20 个 JavaScript 面试题
- liunx 安装jdk1.8
- HDU-1863-畅通工程
- freeswitch 录音录像
- 利用caffe的pycaffe接口将caffemodel中的字段保存为prototxt
- AES For Delphi And Java, AES/ECB/PKCS5Padding(二)