poj 1111(bfs,计算单点周长和四周八个点是否有X)
#include<iostream> #include<cstring> #include<queue> using namespace std; struct Node{ int x,y; Node(){ x = 0; y = 0; } Node(int a,int b){ x = a; y = b; } }; int r,c,a,b,data[25][25],dx[] = {-1,0,1},dy[] = {-1,0,1},result; bool visit[25][25]; void bfs(){ a--; b--; queue<Node>q; q.push(Node(a,b)); visit[a][b] = true; for(int i=0;i<3;i++){//计算单点周长 for(int j=0;j<3;j++){ if((i==1&&j==1)||(dx[i]*dy[j]!=0))continue; int x = a+dx[i]; int y = b+dy[j]; bool flag = false; if(x<0||x>=r){ result++; flag = true; } if(y<0||y>=c){ result++; flag = true; } if(!flag){ if(!data[x][y]){ result++; } } } } while(!q.empty()){ int x = q.front().x; int y = q.front().y; q.pop(); for(int i=0;i<3;i++){//计算四周八个点是否有X for(int j=0;j<3;j++){ if(i==1&&j==1)continue; int px = x+dx[i]; int py = y+dy[j]; if(px<0||py<0||px>=r||py>=c)continue; if(data[px][py]==1&&!visit[px][py]){ q.push(Node(px,py)); visit[px][py] = true; for(int s=0;s<3;s++){ for(int t=0;t<3;t++){ int px_s = px+dx[s]; int py_t = py+dy[t]; if((s==1&&t==1)||(dx[s]*dy[t]!=0))continue; bool flag = false; if(px_s<0||px_s>=r){ result++; flag = true; } if(py_t<0||py_t>=c){ result++; flag = true; } if(!flag){ if(!data[px_s][py_t]){ result++; } } } } } } } } } int main(){ char ch[25]; while(scanf("%d%d%d%d",&r,&c,&a,&b)==4&&r){ memset(data,0,sizeof(data)); memset(visit,false,sizeof visit); for(int i=0;i<r;i++){ scanf("%s",ch); for(int j=0;j<c;j++){ if(ch[j]=='X')data[i][j] = 1; } } result = 0; bfs(); printf("%d\n",result); } return 0; }
分类:
POJ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)