Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
题目链接:
http://codeforces.com/contest/525/problem/D
题意
给你一个n*m的田地,有一些*的地方是可以移除变成"."的,然后问你移除最少的"*",使的每一个"."的联通块都是矩形
题解:
2*2 的矩形中,如果有一个 '*' 与三个 '.' ,那么这个 '*' 就一定要变成 ‘.' ,然后bfs
代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define mem(a) memset(a,0,sizeof(a)) 5 #define mp(x,y) make_pair(x,y) 6 const int INF = 0x3f3f3f3f; 7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL; 8 inline ll read(){ 9 ll x=0,f=1;char ch=getchar(); 10 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 11 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 12 return x*f; 13 } 14 ////////////////////////////////////////////////////////////////////////// 15 const int maxn = 2e3+10; 16 17 char mp[maxn][maxn]; 18 int dx[8] = {0,0,1,-1,1,1,-1,-1}; 19 int dy[8] = {1,-1,0,0,1,-1,1,-1}; 20 int n,m; 21 22 void check(int x,int y){ 23 int cnt = 0; 24 for(int i=0; i<2; i++) 25 for(int j=0; j<2; j++){ 26 if(mp[x+i][y+j] == '.') 27 cnt++; 28 } 29 if(cnt == 3){ 30 for(int i=0; i<2; i++) 31 for(int j=0; j<2; j++) 32 mp[x+i][y+j] = '.'; 33 for(int i=0; i<8; i++){ 34 int tx=x+dx[i],ty=y+dy[i]; 35 if(tx<1 || tx>n || ty<1 || ty>m) continue; 36 check(tx,ty); 37 } 38 } 39 } 40 41 int main(){ 42 n=read(),m=read(); 43 for(int i=1; i<=n; i++) 44 for(int j=1; j<=m; j++) 45 scanf(" %c",&mp[i][j]); 46 47 for(int i=1; i<=n; i++) 48 for(int j=1; j<=m; j++) 49 check(i,j); 50 51 for(int i=1; i<=n; i++){ 52 for(int j=1; j<=m; j++) 53 printf("%c",mp[i][j]); 54 puts(""); 55 } 56 57 58 return 0; 59 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!