codeforces723D-Lakes in Berland-DFS
来源:互联网 发布:javascript跳转新页面 编辑:程序博客网 时间:2024/06/07 11:33
题目大意:给你一张图,里面的连通块(不能含有边界)就是湖,现在你要在湖上面填泥土,使得这片土地上的湖数量减少到k个,问你最少要填多少块泥土;
题目解析:首先要使湖的数量减少,肯定要使一整个湖填完,否则这个湖只可能变成1个或2个,所以我们需要对所有的湖排个序,把面积最小的湖填掉就可以了,把湖初始化出来只要dfs可以了,填湖再dfs一下即可;
AC代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>using namespace std;int n,m,f,k,ans;char graph[51][51];bool flag[51][51];bool ocean(int i,int j){if(i==1||j==1||i==n||j==m)return false;else return true;}struct point{int x,y;int area;point(int a,int b,int c){x=a;y=b;area=c;}};vector<point>vec;int dfs(int a,int b){flag[a][b]=1;int area=1;if(ocean(a+1,b)==1&&graph[a+1][b]=='.'&&flag[a+1][b]==0)area+=dfs(a+1,b);else if(ocean(a+1,b)==0&&graph[a+1][b]=='.'&&flag[a+1][b]==0){area+=dfs(a+1,b);f=0;}if(ocean(a,b+1)==1&&graph[a][b+1]=='.'&&flag[a][b+1]==0)area+=dfs(a,b+1);else if(ocean(a,b+1)==0&&graph[a][b+1]=='.'&&flag[a][b+1]==0){area+=dfs(a,b+1);f=0;}if(ocean(a-1,b)==1&&graph[a-1][b]=='.'&&flag[a-1][b]==0)area+=dfs(a-1,b);else if(ocean(a-1,b)==0&&graph[a-1][b]=='.'&&flag[a-1][b]==0){area+=dfs(a-1,b);f=0;}if(ocean(a,b-1)==1&&graph[a][b-1]=='.'&&flag[a][b-1]==0)area+=dfs(a,b-1);else if(ocean(a,b-1)==0&&graph[a][b-1]=='.'&&flag[a][b-1]==0){area+=dfs(a,b-1);f=0;}return area;}bool cmp(point a,point b){return a.area<b.area;}void dfss(int a,int b){graph[a][b]='*';ans++;flag[a][b]=0;if(graph[a+1][b]=='.'&&flag[a+1][b])dfss(a+1,b);if(graph[a][b+1]=='.'&&flag[a][b+1])dfss(a,b+1);if(graph[a-1][b]=='.'&&flag[a-1][b])dfss(a-1,b);if(graph[a][b-1]=='.'&&flag[a][b-1])dfss(a,b-1);}int main(){int i,j;string s;while(scanf("%d%d%d",&n,&m,&k)!=EOF){vec.clear();memset(flag,0,sizeof(flag));for(i=1;i<=n;i++){cin>>s;for(j=1;j<=m;j++){graph[i][j]=s[j-1];}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(flag[i][j]==0&&graph[i][j]=='.'){f=1;if(ocean(i,j)){point temp(i,j,dfs(i,j));if(f==1)vec.push_back(temp);}}}}int sum=vec.size();int tar=sum-k;sort(vec.begin(),vec.end(),cmp);ans=0;for(i=0;i<tar;i++){dfss(vec[i].x,vec[i].y);}printf("%d\n",ans);for(i=1;i<=n;i++){for(j=1;j<=m;j++)printf("%c",graph[i][j]);printf("\n");}}return 0;}
0 0
- codeforces723D-Lakes in Berland-DFS
- codeforces723D.Lakes in Berland(dfs)
- codeforces723D Lakes in Berland 搜索
- D.Lakes in Berland(DFS)
- Codeforces373D-Lakes in Berland(dfs)
- codeforces 723D. Lakes in Berland [DFS]【】
- CodeForces 723D Lakes in Berland DFS
- D. Lakes in Berland 【dfs+贪心】
- D. Lakes in Berland
- Lakes in Berland
- D. Lakes in Berland
- [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)
- CodeFroces723D Lakes in Berland BFS
- codeforces#375(div.2)723D - Lakes in Berland dfs+bfs
- Windows下多个Python版本共存
- Longest Substring Without Repeating Characters from LeetCode
- HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
- 认识css样式(第二部分-文字排版)
- 文章标题
- codeforces723D-Lakes in Berland-DFS
- soekct实践编程1
- Codeforces Round #285 (Div. 2) C Misha and Forest
- 分库分表策略的可实现架构
- 【软件工程】——项目开发计划
- 使用feign调用restful服务
- 【结论&例题】背包动规
- 自动化部署软件安装脚本
- 百万数据查询优化技巧三十则