佇列是一種先進先出的資料結構
可以定義乙個結構體,表示乙個佇列。
struct _queue
;
另外c++中有stl標準模板庫
封裝了queue類
標頭檔案#include < queue >
queue<
int>vis;
vis.
pop();
//刪除隊首元素
vis.
back()
;//返回隊尾元素
vis.
front()
;//返回隊首元素
vis.
empty()
;//判斷是否為空,空為true,非空為false。
vis.
push
(x);
//從隊尾插入元素x
vis.
size()
;//求佇列中元素個數
nefu 1634 報數-佇列-約瑟夫環
descriptionn個小朋友們坐成乙個圓圈,編號分別為1,2,3…n;第1個小朋友從1開始報數,報到m的小朋友離開座位;然後下乙個小朋友從1接著報數;直到剩下最後乙個小朋友為止;
input
輸入2個數字n和m;(1<=n,m<=1000)
output
輸出最後乙個小朋友的編號!
sample input
10 5
sample output
3
#include
using
namespace std;
struct _queue
;int
main()
while
(vis.tail-vis.head>1)
vis.head++;}
printf
("%d\n"
,vis.num[vis.head]);
return0;
}
使用stl
#include
using
namespace std;
intmain()
while
(vis.
size()
>1)
vis.
pop();
}printf
("%d\n"
,vis.
front()
);return0;
}
可以說bfs的實現就是佇列
具體等學bfs時寫
貼道題nefu 1663 關係網路-佇列
description有 n 個人,他們的編號為 1~n,其中有一些人相互認識,現在 x 想要認識 y,可以通過他所認識的人來認識更多的人(如果 a 認識 b,b 認識 c,那麼 a 可以通過 b 來認識 c),求出 x 最少需要通過多少人才能認識 y。
input
第 1 行 3 個整數 n、x、y,2≤n≤100;
接下來的 n 行是乙個 n×n 的鄰接矩陣,
a[i][j]=1 表示 i 認識 j,a[i][j]=0 表示不認識。
保證 i=j 時,a[i][j]=0,並且 a[i][j]=a[j][i]。
output
一行乙個整數,表示 x 認識 y 最少需要通過的人數。資料保證 x 一定能認識 y。
sample input
5 1 5
0 1 0 0 0
1 0 1 1 0
0 1 0 1 0
0 1 1 0 1
0 0 0 1 0
sample output
2
#include
using
namespace std;
struct sa
;int
main()
;for
(i=1
;i<=n;i++
) vis.
push()
; b[x]=1
;while
(!vis.
empty()
)for
(i=1
;i<=n;i++))
; b[i]=1
;}}}
return0;
}
實現方法沒細講
應該是二叉堆(沒學)
priority_queue <
int,vector<
int>
,greater<
int>
>vis;
//第三個,寫greater,則小的優先順序高,不寫或者寫less,則大的優先順序高; vis.empty();//判斷是否為空
vis.
pop();
//刪除優先順序最高元素
vis.
push
(x);
//插入元素x
vis.
size()
;//求元素個數
vis.
top();
//返回優先順序最高元素
nefu 1688 合併果子-優先佇列
description在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。
每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n-1 次合併之後, 就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。
因為還要花大力氣把這些果子搬回家,所以多多在合併果子時要盡可能地節省體力。假定每個果子重量都為 1 ,並且已知果子的種類 數和每種果子的數目,你的任務是設計出合併的次序方案,使多多耗費的體力最少,並輸出這個最小的體力耗費值。
例如有 3 種果子,數目依次為 1 , 2 , 9 。可以先將 1 、 2 堆合併,新堆數目為 3 ,耗費體力為 3 。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為 12 ,耗費體力為 12 。所以多多總共耗費體力 =3+12=15 。可以證明 15 為最小的體力耗費值。
input
共兩行。
第一行是乙個整數 n(1≤n≤10000) ,表示果子的種類數。
第二行包含 n 個整數,用空格分隔,第 i 個整數 ai(1≤ai ≤20000) 是第 i 種果子的數目。
output
乙個整數,也就是最小的體力耗費值。輸入資料保證這個值小於 2^31。
sample input
31 2 9
sample output
15
#include
using
namespace std;
intmain()
int s=
0,m=0;
for(i=
1;i)printf
("%d\n"
,s);
}return0;
}
如果元素是結構體,需要過載運算子來設定優先順序
#include
using
namespace std;
struct sa
;bool
operator
<
(const sa &s1,
const sa &s2)
//過載小於號
intmain()
);}for
(int i=
1;i<=n;i++))
;}}return0;
}
FIFO佇列和優先佇列
fifo佇列相當於一般的佇列 優先隊列為操作時有優先順序的佇列 1.標頭檔案 include 2.fifo佇列 queue 型別名 變數名 3.優先佇列 priority queue 型別名 變數名 1.預設優先順序為優先順序最高的先出隊,預設的int型別的優先佇列中先出隊的為佇列中較大的數。2.小...
FIFO佇列和優先佇列
fifo佇列 定義 先進先出的儲存結構 刪除時先刪最後乙個元素 queue 型別 q 增 q.push 元素值 在隊尾加入乙個元素 void刪 q.pop 刪除元素,刪除隊首元素 void改 查 q.size 返回佇列中剩餘元素個數 int q.empty 返回佇列是否為空 bool q.front...
佇列以及優先佇列
1.佇列 佇列的定義 標頭檔案 include 佇列是一種先進先出的資料結構 佇列的宣告 queueq 宣告字元型別 queueq 宣告結構體型別 以及可以宣告一些自定義的型別 佇列的操作 入佇列 s.push x 出佇列 s.pop 返回佇列的資料數量 s.size 判斷佇列是否為空 s.empt...