codeforces|codeforces - 377A 题解
题目大意:给定一个n*m区域,#为墙,“.”为空地,填充k片空地,同时使得剩下的空地继续保持连通
题目解法:DFS遍历sum-k片空地(sum是空地总数),然后枚举一遍,没有被遍历过的空地全部填充
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int map[502][502]; 8 bool vis[502][502]; 9 int n,m,k; 10 int sum=0; 11 int amount=0; 12 void dfs(int x,int y) 13 { 14vis[x][y]=true; 15amount+=1; 16if(amount==sum-k) 17{ 18return; 19} 20if(!vis[x-1][y]&&map[x-1][y]&&amount!=sum-k) 21{ 22dfs(x-1,y); 23} 24if(!vis[x+1][y]&&map[x+1][y]&&amount!=sum-k) 25{ 26dfs(x+1,y); 27} 28if(!vis[x][y-1]&&map[x][y-1]&&amount!=sum-k) 29{ 30dfs(x,y-1); 31} 32if(!vis[x][y+1]&&map[x][y+1]&&amount!=sum-k) 33{ 34dfs(x,y+1); 35} 36return; 37 } 38 int main() 39 { 40 41scanf("%d%d%d",&n,&m,&k); 42memset(map,0,sizeof(map)); 43memset(vis,false,sizeof(vis)); 44for(int i=1; i<=n; i++) 45{ 46getchar(); 47for(int j=1; j<=m; j++) 48{ 49char c=getchar(); 50if(c=='#') 51{ 52map[i][j]=0; 53} 54else 55{ 56map[i][j]=1; 57sum+=1; 58} 59} 60} 61for(int i=1; i<=n&&amount!=sum-k; i++) 62{ 63for(int j=1; j<=m; j++) 64{ 65if(map[i][j]) 66{ 67dfs(i,j); 68break; 69} 70} 71} 72for(int i=1; i<=n; i++) 73{ 74for(int j=1; j<=m; j++) 75{ 76if(!map[i][j]) 77{ 78printf("#"); 79} 80else 81{ 82if(vis[i][j]) 83{ 84printf("."); 85} 86else 87{ 88printf("X"); 89} 90} 91} 92printf("\n"); 93} 94return 0; 95 }
【codeforces|codeforces - 377A 题解】转载于:https://www.cnblogs.com/shao0099876/p/7344330.html
推荐阅读
- ACSL|ACSL 美国计算机科学联赛 2016-2017 R4 摩天大楼-Skyscraper 题解
- dCas9技术流程与实验问题解决方案
- 【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解
- 环境安装部署|Anaconda 中升级Python到高版本以及 Solving environment问题解决
- arcgis属性表出现中文乱码问题解决
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 网络爬虫抓取图片并上传到fastdfs图片不完整问题解决
- anaconda3之基本使用、更换国内镜像、安装python虚拟器、第三方库安装及问题解决
- 刘佳佳读书打卡第65天2018.4.29《教师、学生和家长焦点难题解决方案》69~79页
- Leetcode|Leetcode 算法题解系列 - 二维数组快速查找元素(二叉搜索树)