8.7 WJ的逃离escape 2537
来源:互联网 发布:淘宝选款技巧 编辑:程序博客网 时间:2024/06/07 00:18
- 题目
- 题解
- 代码
题目
当WJ醒来时,发现自己被困在一个地图的左上角,幸好WJ有张图,并了解到出口正是迷宫的右下角,至少有一条路径可以到达出口。
整个地图有些地方会有障碍(保证左上角右下角没有),WJ可以快速奔跑,只是需要拐弯时令人很不爽。为了保持心情愉悦,WJ想知道最少需要几次转弯。
题解
最少转弯问题,与迷宫问题类似,可用广搜解决
由于要求转弯次数最少,每次走都要一直走到不能走为止,经过的点都入队,可证先到的点一定最优
代码
const dx:array[1..4]of integer=(1,-1,0,0); dy:array[1..4]of integer=(0,0,-1,1);var r,c,i,j,k:longint; s:char; a:array[0..501,0..501,1..2]of longint; state:array[1..250000,1..2]of longint;procedure bfs;var i,j,k,head,tail,x,y,x1,y1:longint;begin head:=0;tail:=1;state[1,1]:=1;state[1,2]:=1;a[1,1,1]:=2; repeat inc(head); x:=state[head,1];y:=state[head,2]; for i:=1 to 4 do if (a[x+dx[i],y+dy[i],1]=1) then begin x1:=x+dx[i];y1:=y+dy[i]; while a[x1,y1,1]=1 do begin inc(tail); state[tail,1]:=x1; state[tail,2]:=y1; a[x1,y1,1]:=2; a[x1,y1,2]:=a[state[head,1],state[head,2],2]+1; x1:=x1+dx[i];y1:=y1+dy[i]; end; end; until head=tail;end;begin assign(input,'escape.in'); assign(output,'escape.out'); reset(input); rewrite(output); readln(r,c); for i:=1 to r do begin for j:=1 to c do begin read(s); if s='0' then a[i,j,1]:=1; end; readln; end; bfs; writeln(a[r,c,2]-1); close(input);close(output);end.
阅读全文
1 0
- 8.7 WJ的逃离escape 2537
- WJ的逃离
- 2017.8.7测试 题四 WJ的逃离
- 逃离洞穴(escape)
- NOIP 2007 普及组 复赛 escape 守望者的逃离
- WJ的Direct3D简明教程2:Render-To-Texture
- 【最短路】逃离遗迹 escape.pas/c/cpp
- 动漫电影逃离地球 Escape from Planet Earth (2013)
- wj-conquer
- 逃离自己的影子
- 守望者的逃离
- 守望者的逃离
- 守望者的逃离
- 尾声-怪盗基德的逃离
- 守望者的逃离
- 守望者的逃离
- 守望者的逃离
- 守望者的逃离
- 6.Circular Sequence
- RabbitMQ安装
- 6.Circular Sequence
- [Noip2011]计算系数
- Android Messenger实现IPC通信
- 8.7 WJ的逃离escape 2537
- 【linux shell】 find 常用选项
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
- spring资源访问
- HTML CSS:Getting Serious with HTML
- 303. Range Sum Query
- 安装NVIDIA显卡驱动+CUDA+CUDNN+NVCAFFE的问题总结
- bzoj 2829 计算几何
- 8.7 约数个数shlqsh 2535