PTA的一道题
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXN 10
struct Q{
int Data[MAXN];
int N, n;
};
typedef struct Q * Queue;
struct E{
int v1, v2;
//int weigh //没有权重
};
typedef struct E *Edge;
struct G{
int v;
int e;
int Matrix[MAXN][MAXN];
};
typedef struct G * Graph;
Graph CreateGraph(int);
void EnGraph(Graph, Edge);
void Print(Graph);
void DFS(Graph, int, int *);
void BFS(Graph, int, int *);
Queue CreateQueue(int);
void EnQueue(Queue, int);
int DeQueue(Queue);
int main()
{
int i, j, N, E;
Graph G;
Edge e;
scanf("%d %d", &N, &E);
G = CreateGraph(N);
e = (Edge)malloc(sizeof(struct E));
for( i=1; i<=E; ++i ){
scanf("%d %d", &e->v1, &e->v2);
EnGraph(G, e);
}
Print(G);
return 0;
}
Graph CreateGraph(int N)
{
Graph G = (Graph)malloc(sizeof(struct G));
G->e = 0;
G->v = N;
for( int i=0; i<G->v; ++i ){
for( int j=0; j<G->v; ++j )
G->Matrix[i][j] = 0;
}
return G;
}
void EnGraph(Graph G, Edge E)
{
G->Matrix[E->v1][E->v2] = 1;
G->Matrix[E->v2][E->v1] = 1;
G->e++;
}
void Print(Graph G)
{
int i;
int *N = (int *)malloc(sizeof(int)*G->v);
for( i=0; i<G->v; ++i )
N[i] = 0;
for( i=0; i<G->v; ++i ){
if( !N[i] ){
printf("{", i);
DFS(G, i, N);
printf(" }\n");
}
}
for( i=0; i<G->v; ++i ){
if( N[i] ){
printf("{", i);
BFS(G, i, N);
printf(" }\n");
}
}
}
void DFS(Graph G, int x, int *N)
{
printf(" %d", x);
N[x] = 1;
for( int i=0; i<G->v; ++i ){
if( G->Matrix[x][i] && !N[i] ){
DFS(G, i, N);
}
}
}
void BFS(Graph G, int x, int *N)
{
int i, temp;
Queue Q = CreateQueue(G->v);
EnQueue(Q, x);
N[x] = 0;
printf(" %d", x);
while( Q->n != -1 ){ //队列空
temp = DeQueue(Q);
for(i=0; i<G->v; ++i ){
if( G->Matrix[temp][i] && N[i] ){
EnQueue(Q, i);
N[i] = 0;
printf(" %d", i);
}
}
}
}
Queue CreateQueue(int x)
{
Queue Q = (Queue)malloc(sizeof(struct Q));
Q->N = x;
Q->n = -1;
return Q;
}
void EnQueue(Queue Q, int x)
{
Q->Data[++Q->n] = x;
}
int DeQueue(Queue Q)
{
return Q->Data[Q->n--];
}
这个测试点一直过不去,求大佬帮忙
答主过了吗
– 啥也不爱的耀 4年前