为什么在oj中显示Program exited with code 1.??真的百思不得其解,改了好多遍了,求指点!!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_NODES 100
struct Tree {
int number;
bool visited;
struct Tree** child;
int count;
};
struct Queue {
struct Tree* items[MAX_NODES];
int front;
int rear;
};
void initQueue(struct Queue* q) {
q->front = 0; // Initialize front to 0
q->rear = 0; // Initialize rear to 0
}
void enqueue(struct Queue* q, struct Tree* node) {
if ((q->rear + 1) % MAX_NODES == q->front) { // Check if queue is full
printf("Queue is full\n");
exit(EXIT_FAILURE);
}
q->rear = (q->rear + 1) % MAX_NODES; // Move rear circularly
q->items[q->rear] = node;
node->visited = true;
}
struct Tree* dequeue(struct Queue* q) {
if (q->front == q->rear) { // Check if queue is empty
printf("Queue is empty\n");
exit(EXIT_FAILURE);
}
q->front = (q->front + 1) % MAX_NODES; // Move front circularly
struct Tree* item = q->items[q->front];
return item;
}
void articledfs(struct Tree* node) {
if (node == NULL || node->visited) {
return;
}
printf("%d ", node->number);
node->visited = true;
for (int i = 0; i < node->count; i++) {
articledfs(node->child[i]);
}
}
void articlebfs(struct Tree* root) {
struct Queue q;
initQueue(&q);
enqueue(&q, root);
while (q.front != q.rear) {
struct Tree* current = dequeue(&q);
printf("%d ", current->number);
for (int i = 0; i < current->count; i++) {
struct Tree* childNode = current->child[i];
if (!childNode->visited) {
enqueue(&q, childNode);
childNode->visited = true;
}
}
}
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
struct Tree* nodes = (struct Tree*)malloc(n * sizeof(struct Tree));
if (nodes == NULL) {
printf("Memory allocation failed\n");
return -1;
}
for (int i = 0; i < n; i++) {
nodes[i].number = i + 1;
nodes[i].visited = false;
nodes[i].count = 0;
nodes[i].child = (struct Tree**)malloc(MAX_NODES * sizeof(struct Tree*));
if (nodes[i].child == NULL) {
printf("Memory allocation failed\n");
return -1;
}
}
for (int i = 0; i < m; i++) {
int pre, number;
scanf("%d%d", &pre, &number);
pre--;
if (pre < 0 || pre >= n || number < 1 || number > n) {
printf("Invalid node numbers\n");
return -1;
}
nodes[pre].child[nodes[pre].count++] = &nodes[number - 1];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < nodes[i].count; j++) {
for (int k = j + 1; k < nodes[i].count; k++) {
if (nodes[i].child[j]->number > nodes[i].child[k]->number) {
struct Tree* temp = nodes[i].child[j];
nodes[i].child[j] = nodes[i].child[k];
nodes[i].child[k] = temp;
}
}
}
}
for (int i = 0; i < n; i++) {
articledfs(&nodes[i]);
}
printf("\n");
for (int i = 0; i < n; i++) {
nodes[i].visited = false;
}
articlebfs(&nodes[0]);
for (int i = 0; i < n; i++) {
free(nodes[i].child);
}
free(nodes);
return 0;
}