写一段广度优先搜索C++程序
时间: 2023-02-20 19:35:24 浏览: 43
//广度优先搜索C程序
#include <stdio.h>
#define MAX 20
int adj[MAX][MAX], visited[MAX], n;
void create_graph()
{
int i, max_edges, origin, destin;
printf("Enter number of vertices : ");
scanf("%d", &n);
max_edges = n * (n - 1);
for (i = 1; i <= max_edges; i++) {
printf("Enter edge %d( -1 -1 to quit ) : ", i);
scanf("%d %d", &origin, &destin);
if ((origin == -1) && (destin == -1))
break;
if (origin >= n || destin >= n || origin < 0 || destin < 0) {
printf("Invalid edge!\n");
i--;
} else {
adj[origin][destin] = 1;
}
}
}
void bfs(int v)
{
int i, front = 0, rear = 0;
int que[MAX];
visited[v] = 1;
que[rear++] = v;
while (front != rear) {
v = que[front++];
for (i = 0; i < n; i++) {
if (adj[v][i] == 1 && visited[i] == 0) {
visited[i] = 1;
que[rear++] = i;
}
}
}
}
int main()
{
int v;
create_graph();
printf("Enter the source vertex : ");
scanf("%d", &v);
bfs(v);
return 0;
}