BFS(广度优先搜索)算法的时间复杂度取决于图的实现方式。以下是一些常见的图实现以及它们的相关代码示例和时间复杂度分析:
邻接矩阵是一种常见的表示图的方法,其中使用二维矩阵来表示节点之间的关系。在这种实现中,BFS的时间复杂度为O(V^2),其中V是节点的数量。
示例代码:
#define MAXV 100 // 最大节点数
int adj[MAXV][MAXV]; // 邻接矩阵
void bfs(int s) {
queue q;
bool vis[MAXV] = {false};
q.push(s);
vis[s] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v = 0; v < MAXV; v++) {
if (adj[u][v] && !vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
邻接表是另一种常见的图表示方法,它使用链表来表示节点之间的关系。在这种实现中,BFS的时间复杂度为O(V+E),其中E是边的数量。
示例代码:
#define MAXV 100 // 最大节点数
#define MAXE 1000 // 最大边数
struct edge {
int v, nxt;
} e[MAXE]; // 边
int head[MAXV], idx = 0; // 邻接表头指针,边的下标
void add_edge(int u, int v) {
e[idx].v = v;
e[idx].nxt = head[u];