博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小转弯问题
阅读量:6870 次
发布时间:2019-06-26

本文共 1897 字,大约阅读时间需要 6 分钟。

给一个地图,其中有障碍物,开始人在起点的面对方向任意,求从起点到终点最少转几次弯。

f[pos,x,y]表示人在(x,y)位置,面向方向pos时的最小步数,用BFS或SPFA即可。

View Code
1 program lphone(input,output);   2 type   3    node    = record   4          xx,yy,pos : integer;   5       end;             6 var   7    d          : array[1..4,0..101,0..101] of longint;   8    v          : array[1..4,0..101,0..101] of boolean;   9    q          : array[0..400000] of node;  10    a          : array[0..101,0..101] of char;  11    x          : array[1..4] of longint=(-1,0,1,0);  12    y          : array[1..4] of longint=(0,1,0,-1);  13    start,goal : node;  14    n,m          : longint;  15 procedure init;  16 var  17    i,j : longint;  18 begin  19    readln(m,n);  20    for i:=1 to n do  21    begin  22       for j:=1 to m do  23       begin  24      read(a[i,j]);  25      if a[i,j]='C' then  26         if goal.xx=0 then  27         begin  28            goal.xx:=i;  29            goal.yy:=j;  30         end  31         else  32         begin  33            start.xx:=i;  34            start.yy:=j;  35         end;  36       end;  37       readln;  38    end;  39 end; {
init } 40 procedure spfa; 41 var 42 head,tail : longint; 43 i : longint; 44 newx,newy,newpos : longint; 45 begin 46 fillchar(d,sizeof(d),63); 47 fillchar(v,sizeof(v),false); 48 head:=0; 49 tail:=4; 50 for i:=1 to 4 do 51 begin 52 q[i].xx:=start.xx; 53 q[i].yy:=start.yy; 54 q[i].pos:=i; 55 v[q[i].pos,q[i].xx,q[i].yy]:=true; 56 d[q[i].pos,q[i].xx,q[i].yy]:=0; 57 end; 58 while head
0)and(newx<=n)and(newy>0)and(newy<=m) then 65 if a[newx,newy]<>'*' then 66 if d[q[head].pos,q[head].xx,q[head].yy]
>1; 115 for i:=1 to 4 do 116 if d[i,goal.xx,goal.yy]

转载于:https://www.cnblogs.com/neverforget/archive/2012/03/18/2404679.html

你可能感兴趣的文章
50多种适合机器学习和预测应用的API,你的选择是?(2018年版本)
查看>>
【题目】【4天】寻宝
查看>>
Flutter教程(一) 十分钟了解Flutter
查看>>
maven实战第一步,eclipse创建hello-world项目
查看>>
安装自动化工具ansible
查看>>
手把手教你理解卷积神经网络
查看>>
本地安装sass出错问题解析
查看>>
vue项目优化--使用CDN和Gzip
查看>>
JS练习实例--编写经典小游戏俄罗斯方块
查看>>
简述Linux的启动过程
查看>>
fir.im Weekly - 如何写出零 bug 的代码
查看>>
springboot+postgresql+docker实例
查看>>
[LeetCode] Reverse Vowels of a String
查看>>
Java集合类的排序
查看>>
猴子都能看懂的《Git 分支管理》
查看>>
【面试算法】链表反转
查看>>
Git基本命令学习
查看>>
读书笔记:高性能网站建设
查看>>
镭速(Raysync)文件传输高可用安装部署介绍!
查看>>
使用 Jaeger 完成服务间的链路追踪
查看>>