優先佇列
優先佇列
class
node
:def
__init__
(self, index, bestw, upbound)
:"""
:param index: 表示第幾個物品
:param upbound: 表明當前物品的裝載上限
:param bestw: 表明最優裝載量
"""self.index = index
self.bestw = bestw
self.upbound = upbound
def
__init__
(self, ship_one, ship_two, num)
:"""
:param bestw_list: 主要用來儲存該階段的策略
:param h: 儲存大根堆
:param weight: 用來儲存貨物的總重量
:param ship_one, ship_two: 表示兩艘船承受的總重量
:param num: 儲存總和
:param count:表示入隊順序
"""self.bestw =
0 self.num = num
self.h =
self.weight =[0
] self.ship_one = ship_one
self.ship_two = ship_two
self.
sum=
0 self.count =
0
④判斷佇列是否為空
def
function
(self)
: node = node(0,
0, self.
sum)
(-node.upbound, self.count, node)
) self.count +=
1while
true:if
len(self.h)==0
:break
node =)[
2]if node.bestw > self.bestw:
self.bestw = node.bestw
if node.index != self.num:
if node.bestw + self.weight[node.index +1]
<= self.ship_one and node.upbound >= self.bestw:
node_left = node(node.index +
1, node.bestw + self.weight[node.index +1]
, node.upbound)
(-node_left.upbound, self.count, node_left)
) self.count +=
1if node.upbound - self.weight[node.index +1]
> self.bestw:
node_right = node(node.index +
1, node.bestw, node.upbound - self.weight[node.index +1]
)(-node_right.upbound, self.count, node_right)
) self.count +=
1
class
node
:def
__init__
(self, index, bestw, upbound)
:"""
:param index: 表示第幾個物品
:param upbound: 表明當前物品的裝載上限
:param bestw: 表明最優裝載量
"""self.index = index
self.bestw = bestw
self.upbound = upbound
class
loading
:def
__init__
(self, ship_one, ship_two, num)
:"""
:param bestw_list: 主要用來儲存該階段的策略
:param h: 儲存大根堆
:param weight: 用來儲存貨物的總重量
:param ship_one, ship_two: 表示兩艘船承受的總重量
:param num: 儲存總和
:param count:表示入隊順序
"""self.bestw =
0 self.num = num
self.h =
self.weight =[0
] self.ship_one = ship_one
self.ship_two = ship_two
self.
sum=
0 self.count =
0def
function
(self)
: node = node(0,
0, self.
sum)
(-node.upbound, self.count, node)
) self.count +=
1while
true:if
len(self.h)==0
:break
node =)[
2]if node.bestw > self.bestw:
self.bestw = node.bestw
if node.index != self.num:
if node.bestw + self.weight[node.index +1]
<= self.ship_one and node.upbound >= self.bestw:
node_left = node(node.index +
1, node.bestw + self.weight[node.index +1]
, node.upbound)
(-node_left.upbound, self.count, node_left)
) self.count +=
1if node.upbound - self.weight[node.index +1]
> self.bestw:
node_right = node(node.index +
1, node.bestw, node.upbound - self.weight[node.index +1]
)(-node_right.upbound, self.count, node_right)
) self.count +=
1def
input
(self, num)
:with
open
("weight.txt"
,"r"
)as f:
for i in
range
(num)
:int
(f.readline())
) f.close(
)for i in
range
(num +1)
: self.
sum+= self.weight[i]
defoutput
(self)
:if self.
sum> self.ship_one + self.ship_two:
("貨物過多,裝載不完"
("第一艘船的裝載貨物重量為:"
.format
(self.bestw)
)if self.
sum> self.bestw:
("第二艘船裝不完所有所有貨物"
)else
("第二艘船的裝載重量為:"
.format
(self.
sum- self.bestw)
)if __name__ ==
"__main__"
: ship_one =
int(
input
("請輸入第一艘船的裝載量:"))
ship_two =
int(
input
("請輸入第二艘船的裝載量:"))
num =
int(
input
("請輸入貨物的數量:"))
loading = loading(ship_one=ship_one, ship_two=ship_two, num=num)
loading.
input
(num=num)
loading.function(
) loading.output(
)
裝載問題 BFS(佇列式)分支界限法
bfs即佇列分支界限法 如下 include include include using namespace std typedef struct node node int c 最大裝載重量 int n 裝載個數 int bestw 0 最佳裝載重量 int ew 0 當前裝載重量 int wei...
裝載問題 優先順序佇列分支界限法
include include include using namespace std typedef struct node node struct cmp int c 最大裝載重量 int n 裝載個數 int bestw 0 最佳裝載重量 int ew 0 當前裝載重量 int weight ...
Git學習系列 五 分支管理詳解
分支管理在咱們實際工作中經常用到,因此掌握分支對於咱們從事移動開發並且使用到了git這樣的分布式版本管理工具來說是很有必要的。比如當你餓了的時候,甲幫你做飯,一幫你燒菜 當然你也可以自己做飯燒菜。但是咱們仍然可以看到,我是從乙個餓的狀態變成了乙個飽的狀態,也就是我之前空腹,後來我由甲 分支 和乙 分...