void BFS_A (ALGraph G, int vi) { Queue *q; Init_Queue (&q); ArcNode *p; int v; printf ("%c ", G.vertex[vi].data); In_Queue (q, vi); visited[vi] = 1; while (!IsEmpty_Queue (q)) { Out_Queue (q, &v); p = G.vertex[v].firstArc; while (p) { if (!visited[p->adj]) { printf ("%c ", G.vertex[p->adj].data); visited[p->adj] = 1; In_Queue (q, p->adj); } p = p->nextArc; } } }
int TopoSort (ALGraph G) { Queue *q; int indegree[MAX], outdegree[MAX]; int i, count, k; ArcNode *p; Degree_A (G, outdegree, indegree); Init_Queue (&q); for (i = 0; i < G.vernum; i++) if (indegree[i] == 0) In_Queue (q, i); count = 0; while (!IsEmpty_Queue (q)) { Out_Queue (q, &i); printf ("%c ", G.vertex[i].data); count++; p = G.vertex[i].firstArc; while (p) { k = p->adj; indegree[k]--; if (indegree [k] == 0) In_Queue (q, k); p = p->nextArc; } } if (count < G.vernum) return 0; else return 1; }
//从队列里取8个字符(0、1),转换成一个字节 MyType GetBits(SeqQueue *Q) { MyType i,bits = 0; char x; for(i = 0;i < 8;i++) { if( Out_Queue(Q,&x) != Empty ) { //printf("%c",x); if(x == '0') bits = bits << 1; else bits = (bits << 1)|1; } else break; }//printf(" bits=%d\n",bits);puts(""); return bits; }
void BFS (MGraph G, int vi) { Queue *q; Init_Queue (&q); int v, i; printf ("%c ", G.vertex[vi]); In_Queue (q, vi); visited[vi] = 1; while (!IsEmpty_Queue (q)) { Out_Queue (q, &v); i = 0; while (i < G.vernum) { if (!visited[i] && G.arcs[v][i] != INFINITY) { printf ("%c ", G.vertex[i]); visited[i] = 1; In_Queue (q, i); } i++; } } }