代碼基本抄自 https://blog.csdn.net/qq_34823530/article/details/99202899node
但它的 DFS 是用棧,我覺 vector 既能夠完成 BFS 也能夠 完成 DFS ,因此,就將其改爲 vectorspa
以下:.net
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> #include<map> using namespace std; void BFS(map<char, vector<char>>graph, char s) { vector<char>queue, seen; queue.push_back(s); seen.push_back(s); char vertex; while (queue.size() > 0) { vertex = queue.front(); // 取第一個元素 queue.erase(queue.begin()); // 出隊列 vector <char> nodes = graph[vertex]; // 取所鏈接的結點 for (char w : nodes) // 循環結點 { auto ret = find(seen.begin(), seen.end(), w); if (ret == seen.end()) // 若是找到一個還沒出現過的結點 { queue.push_back(w); // 入隊 seen.push_back(w); // 標記此結點找過了 } } printf("%c ", vertex); }puts(""); } void DFS(map<char, vector<char>>graph, char s) { vector<char>stack, seen; stack.push_back(s); seen.push_back(s); char vertex; while (stack.size() > 0) { vertex = stack.back(); // 取第一個元素 stack.erase(stack.end() - 1); // 出棧 vector <char> nodes = graph[vertex]; // 取所鏈接的結點 for (char w : nodes) // 循環結點 { auto ret = find(seen.begin(), seen.end(), w); if (ret == seen.end()) // 若是找到一個還沒出現過的結點 { stack.push_back(w); // 入棧 seen.push_back(w); // 標記此結點找過了 } } printf("%c ", vertex); }puts(""); } int main(void) { vector<char> a{ 'B', 'C' }; vector<char> b{ 'A', 'C', 'D' }; vector<char> c{ 'A', 'B', 'D','E' }; vector<char> d{ 'B', 'C', 'E','F' }; vector<char> e{ 'C', 'D' }; vector<char> f{ 'D' }; map <char, vector<char>> graph // 定義一個(結點 映射 結點所鏈接的結點) 的圖表 { { 'A',a },{ 'B',b },{ 'C',c },{ 'D',d },{ 'E',e },{ 'F',f } }; BFS(graph, 'A'); DFS(graph, 'A'); system("pause"); return 0; }