图的创建。
#include<iostream>
#include<vector>
using namespace std;
class Node{
public:
int val;
vector<Node*> neighbors;
Node(){
val=0;
neighbors=vector<Node*>();
}
Node(int _val){
val=_val;
neighbors=vector<Node*> ();
}
Node(int _val,vector<Node*> neigh){
val=_val;
neighbors=neigh;
}
};
深度优先搜索
#include<unordered_set>
void dfs(Node *node,unordered_set<Node*> &visited){
visited.insert(node);
cout<<node->val<<" ";
for(auto neigh:node->neighbors){
//没有遍历过这个点
if(visited.find(neigh)==visited.end()){
dfs(neigh,visited);
}
}
}
广度优先搜索
#include<queue>
void bfs(Node *node){
unordered_set<Node*> visited;
queue<Node*> q;
q.push(node);
visited.insert(node);
while(!q.empty()){
Node* cur=q.front();
cout<<cur->val<<" ";
//q.pop() 移除的是队头的元素
q.pop();
for(auto neigh:cur->neighbors){
if(visited.find(neigh)==visited.end()){
q.push(neigh);
visited.insert(neigh);
}
}
}
}
总体代码:
#include<iostream>
#include<vector>
using namespace std;
class Node{
public:
int val;
vector<Node*> neighbors;
Node(){
val=0;
// neighbors=vector<Node*>();
neighbors=vector<Node*>();
}
Node(int _val){
val=_val;
neighbors = vector<Node*>();
}
Node(int _val,vector<Node*> _neighbors){
val=_val;
neighbors=_neighbors;
}
};
#include<unordered_set>
void dfs(Node *node,unordered_set<Node*> &visited){
visited.insert(node);
cout<<node->val<<" ";
for(auto neigh:node->neighbors){
//没有遍历过这个点
if(visited.find(neigh)==visited.end()){
dfs(neigh,visited);
}
}
}
#include<queue>
void bfs(Node *node){
unordered_set<Node*> visited;
queue<Node*> q;
q.push(node);
visited.insert(node);
while(!q.empty()){
Node* cur=q.front();
cout<<cur->val<<" ";
//q.pop() 移除的是队头的元素
q.pop();
for(auto neigh:cur->neighbors){
if(visited.find(neigh)==visited.end()){
q.push(neigh);
visited.insert(neigh);
}
}
}
}
int main()
{
Node *node1=new Node(1);
Node *node2=new Node(2);
Node *node3=new Node(3);
Node *node4=new Node(4);
node1->neighbors.push_back(node2);
node1->neighbors.push_back(node4);
node2->neighbors.push_back(node1);
node2->neighbors.push_back(node3);
node3->neighbors.push_back(node2);
node3->neighbors.push_back(node4);
node4->neighbors.push_back(node1);
node4->neighbors.push_back(node3);
unordered_set<Node*> visited;
// dfs(node1,visited);
bfs(node1);
system("pause");
return 0;
}