关键点:
直接利用DFS, BFS
代码:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
int g[1000][1000];
int visited[20];
int n, v;
typedef struct queue *Queue;
struct queue{
int *q;
int front, rear;
};
Queue creatqueue(int size)
{
Queue Q = (Queue)malloc(sizeof(struct queue));
Q->q = (int *)malloc(sizeof(int)*size);
Q->front = -1;
Q->rear = -1;
return Q;
}
void Enqueue(Queue Q, int x)
{
Q->q[++Q->rear] = x;
}
int Dequeue(Queue Q)
{
return Q->q[++Q->front];
}
int isEmpty(Queue Q)
{
if (Q->front == Q->rear)
return 1;
else
return 0;
}
void DFS(int x)
{
visited[x] = 1;
for (int i=0; i<n; i++)
{
if (g[i][x]&&!visited[i])
{
printf("%d ", i);
DFS(i);
}
}
}
void BFS(int x)
{
Queue Q;
Q = creatqueue(1000);
Enqueue(Q, x);
visited[x] = 1;
while (!isEmpty(Q))
{
int v = Dequeue(Q);
printf("%d ", v);
for (int i=0; i<n; i++)
{
if (!visited[i]&&g[i][v])
{
visited[i] = 1;
Enqueue(Q, i);
}
}
}
}
int main()
{
scanf("%d%d", &n, &v);
for (int i=1; i<=v; i++)
{
int x1, x2;
scanf("%d%d", &x1, &x2);
g[x1][x2] = 1;
g[x2][x1] = 1;
}
for (int i=0; i<n; i++)
{
if (!visited[i])
{
printf("{ %d ", i);
DFS(i);
printf("}\n");
}
}
memset(visited, 0, sizeof(visited));
for (int i=0; i<n; i++)
{
if (!visited[i])
{
printf("{ ", i);
BFS(i);
printf("}\n");
}
}
return 0;
}