如图:
python bfs 预热 (简单粗暴)
# 无向图的的两个节点是否相连 ~ :
from collections import deque
def addEdge(v, w):
global adj
adj[v].append(w)
adj[w].append(v)
def isReachable(s, d, V):
if (s == d):
return True
visited = [False for i in range(V)]
queue = deque()
visited[s] = True
queue.append(s)
while (len(queue) > 0):
s = queue.popleft()
for i in adj[s]:
if i == d:
return True
if not visited[i]:
visited[i] = True
queue.append(i)
return False
if __name__ == "__main__":
V = 4
adj = [[] for i in range(V+1)]
addEdge(0, 1)
addEdge(0, 2)
addEdge(1, 2)
addEdge(2, 0)
addEdge(2, 3)
addEdge(3, 3)
u, v = 1, 3
if isReachable(u, v, V):
print("there is a path!")
else:
print("there is no path!")
c++ bfs 预热
path between two vertices in undirected graph
#include <queue>
#include <iostream>
using namespace std;
vector<vector<int>> adj;
void addEdge(int v, int w) {
adj[v].push_back(w);
adj[w].push_back(v);
}
bool isReachable(int s, int d) {
if (s == d)
return true;
int n = (int)adj.size();
vector<bool> visited(n, false);
queue<int> q;
visited[s] = true;
q.push(s);
while (!q.empty()) {
s = q.front();
q.pop();
for (auto x:adj[s]) {
if (x == d)
return true;
if (!visited[x]){
visited[x] = true;
q.push(x);
}
}
}
return false;
}
int main()
{
int n = 4;
// Create a graph in the above diagram
adj = vector<vector<int>>(n);
addEdge(0,1);
addEdge(0,2);
addEdge(1,2);
addEdge(2,0);
addEdge(2,3);
addEdge(3,3);
int u = 1, v = 3;
if (isReachable(u, v))
cout << "\n There is a path from " << u << " to " << v;
else
cout << "\n There is no path from " << u << " to " << v;
return 0;
}