城堡
题目:
给出一张地图,每个位置的值意义如下:
一个数字有以下四个数中的若干个构成:
1:西面有墙。
2:北面有墙。
4:东面有墙。
8:南面有墙。
这个题我因为一个小错误考试只得了10分,后来又调了很久。。。
终于,聪明的我发现我没有按题目要求做,把优先级搞错了(西面房间的优先级应该最高)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<math.h> using namespace std; int m,n,t,c; int f[5000][6],color[5000],s[5000]; void dfs(int x,int y) { color[x]=y; for(int i=1;i<=f[x][0];i++) { t=f[x][i]; if(!color[t]) dfs(t,y); } return ; } int main() { freopen("fortress.in","r",stdin); freopen("fortress.out","w",stdout); scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&c); if(c<8&&i!=n) f[i*m+j][++f[i*m+j][0]]=i*m+j+m;else c-=8; if(c<4&&j!=m) f[i*m+j][++f[i*m+j][0]]=i*m+j+1;else c-=4; if(c<2&&i!=1) f[i*m+j][++f[i*m+j][0]]=i*m+j-m;else c-=2; if(c<1&&j!=1) f[i*m+j][++f[i*m+j][0]]=i*m+j-1; } int sum=0,maxn1=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(!color[i*m+j]) dfs(i*m+j,i*m+j),sum++; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ++s[color[i*m+j]],maxn1=max(maxn1,s[color[i*m+j]]); printf("%d\n%d\n",sum,maxn1); int maxn2=0,u,v; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { c=color[i*m+j],v=color[i*m+j+1],u=color[i*m+j+m]; if(c!=v&&j!=m) maxn2=max(maxn2,s[c]+s[v]); if(c!=u&& i!=n) maxn2=max(maxn2,s[c]+s[u]); } printf("%d\n",maxn2); for(int j=1;j<=m;j++) for(int i=n;i>=1;i--) { c=color[i*m+j],v=color[i*m+j+1],u=color[i*m+j-m]; if(c!=u && s[c]+s[u]==maxn2) { printf("%d %d N",i,j); return 0; } if(c!=v && s[c]+s[v]==maxn2) { printf("%d %d E",i,j); return 0; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App