使用優先順序佇列廣搜還是使用佇列廣搜

2021-08-02 10:17:33 字數 1617 閱讀 6349

題目

hdu**:

我的解答

2.1使用優先順序佇列的廣搜,很清楚,每次只擴充套件時間最短的那乙個分支,一定能找到最短的那個,如果大於t輸出-1,否則輸出時間。然而優先順序佇列耗時,主要是優先順序佇列的維護。

/**

* > file name: runproblem.cpp

* > author: yyhaker

* > created time: 2017/6/10

* 使用優先順序佇列超時

*/#include

#include

#include

#include

using

namespace

std;

int k,a,b,c,t;

int maze[55][55][55];

int vis[55][55][55]; //儲存是否被訪問狀態以及到達改點的時間

int d[6][3]=;

struct node

if(t.time>t) return

0; node nn;

for(int i=0;i<6;i++)}}

}return0;}

int main()}}

//bfs

memset(vis,0,sizeof(vis));

int ans=bfs();

//printf("%d\n",ans);

if(ans==0||ans>t) printf("-1\n");

else

printf("%d\n",ans);

}}

2.2使用普通佇列的廣搜,擴充套件所有可能的分支,到達終點時即可得到最短時間。

/**

* > file name: runproblem_queue.cpp

* > author: yyhaker

* > created time: 2017/6/10

* * 不使用優先順序佇列就ac了

*/#include

#include

#include

#include

using

namespace

std;

int k,a,b,c,t;

int maze[55][55][55];

int vis[55][55][55]; //儲存是否被訪問狀態以及到達改點的時間

int d[6][3]=;

struct node

//if(t.time>t) return 0;

node nn;

for(int i=0;i<6;i++)}}

}return0;}

int main()}}

//bfs

memset(vis,0,sizeof(vis));

int ans=bfs();

//printf("%d\n",ans);

if(ans==0||ans>t) printf("-1\n");

else

printf("%d\n",ans);

}}

優先順序佇列的使用

public class priorityqueuedemo 獲取排在首位的元素 queue.peek 獲取並刪除排在首位的元素 queue.poll 新增元素 queue.add new int 遍歷所有元素 for int arr queue 轉換為陣列 這裡因為t是一維陣列,所有轉換的結果為陣...

佇列 優先順序佇列

優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...

使用Redis實現優先順序佇列

優先順序佇列是一種如先進先出佇列和堆疊資料結構的抽象資料型別。所不同的是每乙個元素關聯乙個 優先順序 優先順序高的元素比優先順序低的元素優先得到處理。本文講解如何基於redis的sorted set資料型別實現優先順序佇列。sorted set中元素關聯乙個score,可以按score有序查詢元素。...