1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| #include<iostream> using namespace std;
#define MaxVexNum 30
typedef struct ArcNode { int adjvex; struct ArcNode* nextarc; }ArcNode; typedef struct { ArcNode* firstarc; }VerNode; typedef struct { VerNode vertices[MaxVexNum]; int vernum, arcnum; }ALGraph;
struct queue { int count; int head; int rear; int que[MaxVexNum]; }q; void push(int a) { q.que[q.rear] = a; q.rear = (q.rear + 1) % MaxVexNum; q.count++; } void pop() { q.head = (q.head + 1) % MaxVexNum; }
void create(ALGraph& gra,int(*arr)[2]) { for (int i = 0; i < gra.arcnum; i++) { ArcNode* ptr1 = (ArcNode*)malloc(sizeof(ArcNode)); memset(ptr1, 0, sizeof(ArcNode)); ptr1->adjvex = arr[i][1]; ptr1->nextarc = gra.vertices[arr[i][0]].firstarc; gra.vertices[arr[i][0]].firstarc = ptr1;
ArcNode* ptr2 = (ArcNode*)malloc(sizeof(ArcNode)); memset(ptr2, 0, sizeof(ArcNode)); ptr2->adjvex = arr[i][0]; ptr2->nextarc = gra.vertices[arr[i][1]].firstarc; gra.vertices[arr[i][1]].firstarc = ptr2;
} }
void BFS(ALGraph gra, bool* visit, int i) { if (visit[i] == false) { visit[i] = true; cout << i << " "; ArcNode* ptr = gra.vertices[i].firstarc; while (ptr != NULL) { if (visit[ptr->adjvex] == false) push(ptr->adjvex); ptr = ptr->nextarc; } i = q.que[q.head]; pop(); BFS(gra, visit, i); } }
int main() { freopen("./data1.txt", "r", stdin);
ALGraph gra; memset(&gra, 0, sizeof(gra)); memset(&q, 0, sizeof(q)); int arr[100][2]; cin >> gra.vernum >> gra.arcnum; for (int i = 0; i < gra.arcnum; i++) { cin >> arr[i][0] >> arr[i][1]; } create(gra,arr);
bool visit[MaxVexNum] = {false}; int count = 0; for (int i = 0; i < gra.arcnum; i++) if (visit[i] == false) { BFS(gra, visit, i); count++; }
cout << endl; cout << count << endl; cout << q.count;
}
|