#include<stdio.h>
#include<stdlib.h>
typedef struct queue {
int data;
struct queue* next;
}queue,*linklist;
#define V_size 5
bool visited[V_size] = {false};
typedef int Graph[V_size][V_size];
linklist front = (linklist)malloc(sizeof(queue));
linklist rear = front;
Graph G = {
0,1,0,0,1,
1,0,1,1,0,
0,1,0,1,1,
0,1,1,0,1,
1,0,1,1,0 };
void visit(int v){
printf("访问点%d\n",v);
visited[v] = true;
}
void enqueue(int v){
linklist node = (linklist)malloc(sizeof(queue));
node->data = v;
node->next = NULL;
rear->next = node;
rear = node;
}
bool isEmpty() {
if (rear == front) {
return true;
}
return false;
}
int dequeue(int v) {
linklist q = front;
front = q->next;
v = front->data;
front->data = -1;
free(q);
return v;
}
void BFS(int v) {
visit(v);
enqueue(v);
while (isEmpty() == false) {
v = dequeue(v);
for (int i = 0; i < V_size;i++) {
if (G[v][i] == 1 && visited[i] == false) {
visit(i);
enqueue(i);
}
}
}
}
int main() {
BFS(0);
return 0;
}
图中所有节点都减一