魔兽世界 最短路径问题

小A在WOW中是个小术士.作为一名术士,不会单刷副本是相当丢脸的.所谓单刷副本就是单挑BOSS了,这么有荣誉感的事小A怎么会不做呢?于是小A来到了厄运之槌开始了单刷.小A看了看,厄运之槌的地图是一个N*M的矩形(N,M<=100),上面遍布了小怪和传送门.例如(1表示有小怪,0表示无小怪,大写字母表示传送门,传送门:例如,走到 B 传送门点将传送到另一个 B 传送点(次数无限,但每次进入传送点只传送过去,不会在传送回来)数据保证每个传送门有且仅有相对应的另一个传送门):

而入口在左上方(1,1),BOSS却躲在右下方(N,M).小A非常急切的想要完成单刷然后去向其他那些战士啊盗贼啊不会单刷的职业炫耀炫耀,所以呢,小A绝不会在小怪身上浪费时间(当然是绕开他们),并且想通过传送门尽快到达BOSS身边.看啊看,想啊想,还是没找出最快的路.终于,灵机一动,想什么啊,编程呗!
路线如图:

[数据规模]
对60%的数据,n,m<=20
对100%的数据,n,m<=100

 

 

输入格式

第一行2个数据:n m;
下面n行,每行m个数(入口点和BOSS点无怪和传送门),表示厄运之槌的地图。地图数据之间无空格。每步只能走一格,方向上下左右。左上角为入口点,右下角为出口点.

输出格式

一个整数,表示小A最少需要走多少步。如果小A不能走到目标,则输出No Solution.

 

 

in:

 

 

3 4

0000

00A0

A000

 

 

out:

 

4

 

解题报告:

 

看完题目都知道是最短路径的问题,但是题目出了一点小变化,就是传送门的问题。

 

要注意的是走到传送点的时候,知道飞到对应的传送点,不能选择传或不传。所以该点的坐标等于是对应传送点的坐标。

 

以样例来看。如果map[i][j]是0。那么指向的点还是本身。如果是1就指向{0,0},这样好操作。

 

如果是传送点,就指向对应的传送点。

 

那么样例应该是

 

{0,0} {0,1} {0,2} {0,3}

{1,0} {1,1} {2,0} {0,0}

{1,2} {2,2} {2,3} {2,4}

 

以指向的点处理就行了。我做最短路径问题的时候,习惯些SPFA。谁让他怎么好些呢,而且大部分时候,效率都不错,有负权的情况也能用。但是这一题貌似用SPFA效率有点低,但是我还是过了,虽然10个点我跑了2000ms.

 

http://www.rqnoj.cn/Problem_83.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值