BFS广度优先搜索
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
vector<int> v = {0,1,2,3,4,5};
vector<vector<int>> e = {{0,1},{1,3},{2,3},{3,4},{4,5}};
vector<vector<int>> graph;
for(int i = 0;i< 6;i++){
graph.push_back({});
}
for(auto i : e){
graph[i[0]].push_back(i[1]);
graph[i[1]].push_back(i[0]);
}
queue<int> myqueue;
myqueue.push(0);
vector<int> visit(6,0);
while(!myqueue.empty()){
int tmp = myqueue.front();
myqueue.pop();
visit[tmp] = 1;
for(auto i : graph[tmp]){
if(visit[i] != 1){
myqueue.push(i);
}
}
cout << tmp << " ";
}
return 0;
}
dfs深度优先搜索
#include<iostream>
#include<vector>
using namespace std;
vector<int> visit(5,0);
void dfs(vector<vector<int>> graph,int s){
if(visit[s] == 1){
return;
}
cout << s << " ";
visit[s] = 1;
for(auto i : graph[s]){
dfs(graph,i);
}
}
int main(){
vector<int> v = {0,1,2,3,4};
vector<vector<int>> e = {{0,1},{2,2},{3,4}};
vector<int> nul;
vector<vector<int>> graph(5,nul);
for(auto i : e){
graph[i[0]].push_back(i[1]);
graph[i[1]].push_back(i[0]);
}
int count = 0;
for(auto i: v){
if(visit[i] != 1){
dfs(graph,i);
count ++;
}
}
cout << endl << count ;
}
dfs的拓扑排序
#include<iostream>
#include<vector>
using namespace std;
vector<int> visit(10,0);
void dfs(vector<vector<int>> graph,int i,vector<int> &indegree){
if(visit[i] == 1){
return;
}
if(indegree[i] == 0){
cout << i<< " ";
visit[i] = 1;
for(auto j : graph[i]){
indegree[j]--;
dfs(graph,j,indegree);
}
}
}
int main(){
vector<int> v = {0,1,2,3,4,5,6,7,8,9};
vector<vector<int>> e = {{0,1},{1,2},{0,3},{2,3},{3,5},{0,4},{5,6},{3,7},{6,7},{7,8},{0,9},{4,9}};
vector<int> tmp;
vector<vector<int>> graph(10,tmp);
vector<int> indegree(10,0);
for(auto i:e){
graph[i[0]].push_back(i[1]);
indegree[i[1]]++;
}
for(auto i : v){
if(visit[i] == 0 && indegree[i] == 0){
dfs(graph,i,indegree);
}
}
}