(北京網絡賽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