mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-12 11:50:58 +00:00
build
This commit is contained in:
@@ -882,7 +882,7 @@ comments: true
|
||||
// 在鄰接矩陣中新增一行
|
||||
self.adj_mat.push(vec![0; n]);
|
||||
// 在鄰接矩陣中新增一列
|
||||
for row in &mut self.adj_mat {
|
||||
for row in self.adj_mat.iter_mut() {
|
||||
row.push(0);
|
||||
}
|
||||
}
|
||||
@@ -897,7 +897,7 @@ comments: true
|
||||
// 在鄰接矩陣中刪除索引 index 的行
|
||||
self.adj_mat.remove(index);
|
||||
// 在鄰接矩陣中刪除索引 index 的列
|
||||
for row in &mut self.adj_mat {
|
||||
for row in self.adj_mat.iter_mut() {
|
||||
row.remove(index);
|
||||
}
|
||||
}
|
||||
@@ -1982,7 +1982,7 @@ comments: true
|
||||
/* 基於鄰接表實現的無向圖型別 */
|
||||
pub struct GraphAdjList {
|
||||
// 鄰接表,key:頂點,value:該頂點的所有鄰接頂點
|
||||
pub adj_list: HashMap<Vertex, Vec<Vertex>>,
|
||||
pub adj_list: HashMap<Vertex, Vec<Vertex>>, // maybe HashSet<Vertex> for value part is better?
|
||||
}
|
||||
|
||||
impl GraphAdjList {
|
||||
@@ -2009,31 +2009,27 @@ comments: true
|
||||
|
||||
/* 新增邊 */
|
||||
pub fn add_edge(&mut self, vet1: Vertex, vet2: Vertex) {
|
||||
if !self.adj_list.contains_key(&vet1) || !self.adj_list.contains_key(&vet2) || vet1 == vet2
|
||||
{
|
||||
if vet1 == vet2 {
|
||||
panic!("value error");
|
||||
}
|
||||
// 新增邊 vet1 - vet2
|
||||
self.adj_list.get_mut(&vet1).unwrap().push(vet2);
|
||||
self.adj_list.get_mut(&vet2).unwrap().push(vet1);
|
||||
self.adj_list.entry(vet1).or_default().push(vet2);
|
||||
self.adj_list.entry(vet2).or_default().push(vet1);
|
||||
}
|
||||
|
||||
/* 刪除邊 */
|
||||
#[allow(unused)]
|
||||
pub fn remove_edge(&mut self, vet1: Vertex, vet2: Vertex) {
|
||||
if !self.adj_list.contains_key(&vet1) || !self.adj_list.contains_key(&vet2) || vet1 == vet2
|
||||
{
|
||||
if vet1 == vet2 {
|
||||
panic!("value error");
|
||||
}
|
||||
// 刪除邊 vet1 - vet2
|
||||
self.adj_list
|
||||
.get_mut(&vet1)
|
||||
.unwrap()
|
||||
.retain(|&vet| vet != vet2);
|
||||
.entry(vet1)
|
||||
.and_modify(|v| v.retain(|&e| e != vet2));
|
||||
self.adj_list
|
||||
.get_mut(&vet2)
|
||||
.unwrap()
|
||||
.retain(|&vet| vet != vet1);
|
||||
.entry(vet2)
|
||||
.and_modify(|v| v.retain(|&e| e != vet1));
|
||||
}
|
||||
|
||||
/* 新增頂點 */
|
||||
@@ -2048,9 +2044,6 @@ comments: true
|
||||
/* 刪除頂點 */
|
||||
#[allow(unused)]
|
||||
pub fn remove_vertex(&mut self, vet: Vertex) {
|
||||
if !self.adj_list.contains_key(&vet) {
|
||||
panic!("value error");
|
||||
}
|
||||
// 在鄰接表中刪除頂點 vet 對應的鏈結串列
|
||||
self.adj_list.remove(&vet);
|
||||
// 走訪其他頂點的鏈結串列,刪除所有包含 vet 的邊
|
||||
|
||||
@@ -324,8 +324,7 @@ BFS 通常藉助佇列來實現,程式碼如下所示。佇列具有“先入
|
||||
let mut que = VecDeque::new();
|
||||
que.push_back(start_vet);
|
||||
// 以頂點 vet 為起點,迴圈直至訪問完所有頂點
|
||||
while !que.is_empty() {
|
||||
let vet = que.pop_front().unwrap(); // 佇列首頂點出隊
|
||||
while let Some(vet) = que.pop_front() {
|
||||
res.push(vet); // 記錄訪問頂點
|
||||
|
||||
// 走訪該頂點的所有鄰接頂點
|
||||
|
||||
Reference in New Issue
Block a user