1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <iostream> #include <unordered_map> #include <vector> #include <queue> #include <unordered_set>
using namespace std;
// 广度优先搜索函数 void bfs(const unordered_map<char, vector<char>>& graph, char start) { // 用于存储待访问节点的队列 queue<char> q; // 用于标记已访问的节点 unordered_set<char> visited;
// 将起始节点标记为已访问并加入队列 visited.insert(start); q.push(start);
// 开始遍历 while (!q.empty()) { // 取出队列中的当前节点 char node = q.front(); q.pop();
// 输出当前节点 cout << "Visited: " << node << endl;
// 遍历该节点的所有邻接节点 for (char neighbor : graph.at(node)) { // 如果该邻接节点尚未访问过,加入队列并标记为已访问 if (visited.find(neighbor) == visited.end()) { visited.insert(neighbor); q.push(neighbor); } } } }
int main() { // 图的邻接表表示法 unordered_map<char, vector<char>> graph = { {'a', {'b', 'c'}}, {'b', {'a', 'd', 'e'}}, {'c', {'a', 'f'}}, {'d', {'b'}}, {'e', {'b', 'f'}}, {'f', {'c', 'e'}} };
// 从节点 'a' 开始执行 BFS bfs(graph, 'a');
return 0; }
|