这里写目录标题
一、图的基础知识
1.1 图的基础知识和图的存储
基础知识在这篇文章的前七节,讲的非常好,其实很简单。
图的基础知识
对第六节中的一个注解:关于十字链表的一点理解:
1.2 BFS/DFS遍历以及BFS最短路径
其实BFS/DFS属于图的搜索方法,但是也可用于树,但是在二者中的技术原理是一样的;
本小节的BFS最短路径实现是应对无权的最短距离的情况
DFS是基于栈技术或者递归(递归本来就是基于栈技术实现的);
BFS是基于队列技术实现的,是一层一层地遍历。
根据B站视频前两节,我把它的python版写成C++代码如下:
包括BFS、DFS遍历和BFS最短路径三个函数
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
//bfs遍历
void bfs(map<char,vector<char>> m,char start){
queue<char> q;
q.push(start);
vector<char> seen;
seen.push_back(start);
char vertex;
while(!q.empty()){
vertex = q.front();
q.pop();
for(char w : m[vertex]){
int i = 0;
for(char x : seen){
if(w != x){
i++;
}
if(i == seen.size()){
//说明w不在seen中,开始入队
q.push(w);
seen.push_back(w);
}
}
}
cout << vertex << endl;
}
}
//dfs遍历
void dfs(map<char,vector<char>> m,char start){
stack<char> st;
st.push(start);
vector<char> seen;
seen.push_back(start);
char vertex;
while(!st.empty()){
vertex = st.top();
st.pop();
for(char w : m[vertex]){
int i = 0;
for(char x : seen){
if(w != x)