HDU 1728 逃离迷宫
简单搜索。记录一下到某个点,朝某个方向的最小转弯次数。
#include<iostream> #include<string> #include<iomanip> #include<string.h> #include<algorithm> #include<cstdio> using namespace std; int INF=0x7FFFFFFF; const int maxn=100+5; int n,m; char s[maxn][maxn]; int MIN[5][maxn][maxn]; int X1,X2,Y1,Y2,K; int dir[4][2]={ {0,1}, {1,0}, {0,-1}, {-1,0} }; int flag; bool P(int a,int b) { if(a>=0&&a<=n-1) { if(b>=0&&b<=m-1) { if(s[a][b]!='*') { return 1; } } } return 0; } void dfs(int a,int b,int d,int tot) { if(tot>K) return; if(a==X2&&b==Y2) { flag=1; return; } for(int i=0;i<4;i++) { int x=a+dir[i][0]; int y=b+dir[i][1]; if(P(x,y)==0) continue; if(i==d) { if(tot<MIN[i][x][y]) { MIN[i][x][y]=tot; dfs(x,y,i,tot); } } else { if(tot+1<MIN[i][x][y]) { MIN[i][x][y]=tot+1; dfs(x,y,i,tot+1); } } } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { MIN[0][i][j]=INF; MIN[1][i][j]=INF; MIN[2][i][j]=INF; MIN[3][i][j]=INF; } scanf("%d%d%d%d%d",&K,&Y1,&X1,&Y2,&X2); X1--; Y1--; X2--; Y2--; flag=0; for(int i=0;i<4;i++) { MIN[i][X1][Y1]=0; dfs(X1,Y1,i,0); if(flag) break; } if(flag) printf("yes\n"); else printf("no\n"); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
2015-05-03 hihoCoder挑战赛11 A 随机斐波那契
2015-05-03 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
2015-05-03 湖南多校对抗赛(2015.05.03)Problem B: War
2015-05-03 hdu 1305 Immediate Decodability