邻接矩阵
和邻接表
1000
。vector<int> Adj[N];
Adj[1].push_back(3);
struct Node{
int v;
int w;
};
vector<Node> Adj[N];
//如果想添加边
Node temp;
temp.v = 3;
temp.w = 4;
Adj[1].push_back(temp);
//更快的方式,用定义结构体Node时构造函数
struct Node{
int v, w;
Node(int _v, int _w) : v(_v), w(_w) {}
}
//这样就可以不用定义临时变量
Adj[1].push_back(Node(3, 4));
//伪代码
DFS(u){//访问顶点u
vis[u] = true;
for(从u出发能够达到的所有顶点v){
if(vis[v] == false) DFS(v);
}
}
DFSTrave(G){//遍历图
for(G的所有顶点u){
if(vis[u] == false) DFS(u);
}
}
const int MAXV = 1000;//最大顶点数
const int INF = 1000000000;//设INF为一个很大的数
int n, G[MAXN][MAXN];
bool vis[MAXV] = {false};//用于判断顶点是否被访问
void DFS(int u, int depth){
vis[u] = true;
//如果需要对u进行一些操作,可以在这里进行
//下面是对所有从u出发能到达的分支顶点进行枚举
for(int v = 0; v < n; v++){
if(vis[v] == false && G[u][v] != INF){
DFS(v, depth+1);
}
}
}
void DFSTrace(){//遍历图
for(int u = 0; u < n; u++){//对于每个顶点
if(vis[u] == false){
DFS(u, 1);//访问u和u所在的连通块,1表示初始为第一层
}
}
}
vector<int> Adj[MAXN];//图G的邻接表
int n;//n为顶点数,MAXN为最大顶点数
bool vis[MAXN] = {false};
void DFS(int u, int depth){
vis[u] = true;
//一些操作也可在此处进行操作
for(int i = 0; i < Adj[u].size(); i++){
int v = Adj[u][i];
if(vis[v] == false){
DFS(v, depth+1);
}
}
}
void DFSTrace(){
for(int u = 0; u < n; u++){
if(vis[u] == false){
DFS(u, 1);
}
}
}
BFS(u){
queue q;
将u入队列;
inq[u] = true;
while(q非空){
取出队首元素u进行访问;
for(遍历该顶点可以到的所有结点v){
if(inq[v] == false){
将v入队列;
inq[v] = true;
}
}
}
}
BFSTrace(G){
for(G所有结点){
if(inq[u] == false){
BFS(u);
}
}
}
const int maxn;
const int INF;
int n;
vector<int> G[maxn][maxn];
bool inq[maxn] = {false};
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 < n; i++){//这里直接数遍历所有结点,而不是这个Adj[now].size()
if(inq[v] == false && G[now][v] != INF){
q.push(v);
inq[v] = true;
}
}
}
}
void BFSTrace(){
for(int u = 0; i < n; u++){
if(inq[u] == false){
BFS(q);
}
}
}
vector<int> Adj[maxn];
int n;
bool inq[maxn];
BFS(int u){
queue<int> q;
q.push(u);
inq[u] = true;
while(!q.empty()){
int u = q.front();
q.pop();
for(int i = 0; i < Adj[u].size(); i++){
int v = Adj[u][i];
if(inq[v] == false){
q.push(v);
inq[v] = true;
}
}
}
}
void BFSTrace(){
for(int u = 0; u < n; u++){
if(inq[u] == false){
BFS(u);
}
}
}
struct Node{
int v;
int layer;
};
vector<Node> Adj[maxn];
void BFS(int s){
queue<Node> q;
Node start;
start.v = s;
start.layer = 0;
q.push(start);
inq[start.v] = true;
while(!q.empty()){
Node topNode = q.front();
q.pop();
int u = topNode.v;
for(int i = 0; i < Adj[u].size(); i++){
Node next = Adj[u][i];
next.layer = topNode.layer + 1;
if(inq[next.v] == false){
q.push(next);
inq[next.v] = true;
}
}
}
}
原文:https://www.cnblogs.com/tsruixi/p/12367843.html