poj 3984(模板题,bfs)
#include<iostream> #include<cstring> #include<cstdio> #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 data[5][5]; Node pre[5][5]; void print(){ Node u(4,4); vector<Node>nodes; for(;;){ //倒序插入路径节点 nodes.push_back(u); if(u.x==0&&u.y==0)break; u = pre[u.x][u.y]; } for(int i=nodes.size()-1;i>=0;i--){ printf("(%d, %d)\n",nodes[i].x,nodes[i].y); } } void bfs(){ int i; queue<Node>q; int d[5][5]; memset(d,-1,sizeof d); Node u(0,0); d[0][0] = 0; q.push(u);// 入队列 while(!q.empty()){ Node u = q.front();q.pop(); if(u.x==4&&u.y==4){ // for(int i=0;i<5;i++){ // for(int j=0;j<5;j++){ // cout<<d[i][j]<<" "; // } // cout<<endl; // } cout<<endl; print(); return; } // 下节点可行 if(u.x+1<5&&data[u.x+1][u.y]==0&&d[u.x+1][u.y]==-1){ // 更新层次关系 d[u.x+1][u.y] = d[u.x][u.y] + 1; // 记录父节点 pre[u.x+1][u.y] = u; //入队列 q.push(Node(u.x+1,u.y)); } // 上节点可行 if(u.x-1>=0&&data[u.x-1][u.y]==0&&d[u.x-1][u.y]==-1){ d[u.x-1][u.y] = d[u.x][u.y] + 1; pre[u.x-1][u.y] = u; q.push(Node(u.x-1,u.y)); } // 右节点可行 if(u.y+1<5&&data[u.x][u.y+1]==0&&d[u.x][u.y+1]==-1){ d[u.x][u.y+1] = d[u.x][u.y] + 1; pre[u.x][u.y+1] = u; q.push(Node(u.x,u.y+1)); } // 左节点可行 if(u.y-1>=0&&data[u.x][u.y-1]==0&&d[u.x][u.y-1]==-1){ d[u.x][u.y-1] = d[u.x][u.y] + 1; pre[u.x][u.y-1] = u; q.push(Node(u.x,u.y-1)); } } } int main(){ int i,j; for(i=0;i<5;i++){ for(j=0;j<5;j++){ scanf("%d",&data[i][j]); } } bfs(); 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)