// DFS遍历图 ---------------------------------------------------------
const MAXV = 1000;
const INF = 1000000000;
// 邻接矩阵版
int n, G[MAXV][MAXV];
bool vis[MAXV];
void DFS(int u, int depth) {
vis[u] = true;
for(int v=0; v<n; v++)
if(vis[v] == false && G[u][v] != INF)
DFS(v, depth+1);
}
void DFSTrave() { //访问到每个连通快
for(int v=0; v<n; v++)
if(vis[v] == false)
DFS(v, 1);
}
// 邻接表版
int n;
vector<int> Adj[MAXV];
bool vis[MAXV];
void DFS(int u, int depth) {
vis[u] = true;
for(int i=0; i<Adj[u].size(); i++)
if(vis[Adj[u][i]] == false)
DFS(Adj[u][i], depth+1);
}
void DFSTrave() {
for(int v=0; v<n; v++)
if(vis[v] == false)
DFS(v, 1);
}
// BFS遍历图 ---------------------------------------------------------
// 邻接矩阵版
int n, G[MAXV][MAXV];
bool inq[MAXV]; //记录顶点是否入过队
void BFS(int u) {
queue<int> q;
q.push(u);
inq[u] = true;
while(!q.empty()) {
int now = q.front();
q.pop();
for(int v=0; v<n; v++) {
if(G[now][v] != INF && inq[v] == false) {
q.push(v);
inq[v] = true;
}
}
}
}
void BFSTrave() {
for(int v=0; v<n; v++) {
if(inq[v] == false)
BFS(v);
}
}
// 邻接表版
int n;
vector<int> Adj[MAXV];
bool inq[MAXV];
void BFS(int u) {
queue<int> q;
q.push(u);
inq[u] = true;
while(!q.empty()) {
int now = q.front();
q.pop();
for(int i=0; i<Adj[now].size(); i++) {
int v = Adj[u][j];
if(inq[v] == false) {
q.push(v);
inq[v] = true;
}
}
}
}
void BFSTrave() {
for(int v=0; v<n; v++) {
if(inq[v] == false)
BFS(v);
}
}
// 当需要:在给定起始点的情况下,输出该连接块内所有顶点的层号
struct Node {
int v;
int layer;
};
int n;
vector<Node> Adj[MAXV];
bool inq[MAXV];
void BFS(int s) {
queue<Node> q;
Node st;
st.v = s;
st.layer = 0;
q.push(st);
inq[st.v] = true;
while(!q.empty()) {
Node nowNode = q.front();
q.pop();
int u = nowNode.v;
for(int i=0; i<Adj[u].size(); i++) {
Node next = Adj[u][i];
next.layer = nowNode.layer + 1;
if(inq[next.v] == false) {
q.push(next);
inq[next.v] = true;
}
}
}
}
遍历图
最新推荐文章于 2023-04-13 10:19:18 发布