洛谷P1443马的遍历-题解
原题:
思路:
广搜。
但队列除了记忆坐标,还要记忆步数。
在将一个点入队的时候,这个点的步数为这个点的父亲节点的步数+1,顺便把答案设了。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<bits/stdc++.h> using namespace std; int n,m; int sx,sy; int a[405][405]; int book[405][405]; int nxt[8][2]={{-2,1},{-2,-1},{-1,2},{-1,-2},{2,1},{2,-1},{1,2},{1,-2}}; queue< int > qx; queue< int > qy; queue< int > qs; void BFS() { while (!qx.empty()&&!qy.empty()) { for ( int i=0;i<8;i++) { int tx=qx.front()+nxt[i][0]; int ty=qy.front()+nxt[i][1]; int ts=qs.front()+1; if (tx<=0||tx>n||ty<=0||ty>m) continue ; if (book[tx][ty]==1) continue ; a[tx][ty]=ts; book[tx][ty]=1; qx.push(tx); qy.push(ty); qs.push(ts); } qx.pop(); qy.pop(); qs.pop(); } } int main() { scanf ( "%d %d %d %d" ,&n,&m,&sx,&sy); qx.push(sx); qy.push(sy); qs.push(0); book[sx][sy]=1; BFS(); for ( int i=1;i<=n;i++) { for ( int j=1;j<=m;j++) if (book[i][j]) printf ( "%-5d" ,a[i][j]); else printf ( "%-5d" ,-1); printf ( "\n" ); } return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2015-08-06 TinyXML:一个优秀的C++ XML解析器
2011-08-06 Asp.Net上传文件到Access数据中,并从数据库中读取文件并保存