(北京网络赛09题)题意:给一矩阵(图),里面有起点,终点,还有探照灯(每个有初始朝向,每秒顺时针转90度),前面有灯或者自己被灯照着,移动就要花3秒,求起点到终点最短时间。
用一个数组三维数组记录一下,用来当前位置当前时间%4有没有灯,然后优先队列(时间短的在前面),搜索即可。考虑到可以来回走或者原地等,不能简单判重剪枝:每个地方最多是4种状态!就是4秒之后就全图状态回到一样!所以若当前状态(时间%4)下来过就不用来了。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; struct xy { int x,y; int times; bool operator <(const xy &ttt)const { return ttt.times
q; q.push(ss); while(!q.empty()) { xy cur=q.top(); q.pop(); if(a[cur.x][cur.y]==4&&cur.times
=0&&next.y>=0&&next.x
=0&&yy>=0&&xx
=0&&yy>=0&&xx
=0&&yy>=0&&xx
=0&&yy>=0&&xx