程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 5040 優先隊列BFS+剪枝

hdu 5040 優先隊列BFS+剪枝

編輯:C++入門知識

hdu 5040 優先隊列BFS+剪枝


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved