代码基本抄自 https://blog.csdn.net/qq_34823530/article/details/99202899
但它的 DFS 是用栈,我觉 vector 既可以完成 BFS 也可以 完成 DFS ,所以,就将其改成 vector
如下:
#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;
}
原文:https://www.cnblogs.com/asdfknjhu/p/12431684.html