CS 1501 Graph code segments from Sedgewick text -------------------------------- CHAPTER 30 Connectivity int visit(int k) // DFS to find articulation points { struct node *t; int m, min; val[k] = ++id; min = id; for (t = adj[k]; t != z; t = t->next) if (val[t->v] == unseen) { m = visit(t->v); if (m < min) min = m; if (m >= val[k]) cout << name(k); } else if (val[t->v] < min) min = val[t->v]; return min; } -------------------------------- CHAPTER 31 Weighted Graphs PQ pq(maxV); visit(int k) // PFS, adjacency lists { struct node *t; if (pq.update(k, -unseen) != 0) dad[k] = 0; while (!pq.empty()) { id++; k = pq.remove(); val[k] = -val[k]; if (val[k] == -unseen) val[k] = 0; for (t = adj[k]; t != z; t = t->next) if (val[t->v] < 0) if (pq.update(t->v, priority)) { val[t->v] = -(priority); dad[t->v] = k; } } } void kruskal() { int i, m, V, E; struct edge { char v1, v2; int w; }; struct edge e[maxE]; PQ pq(maxE); EQ eq(maxE); cin >> V >> E; for (i = 1; i <= E; i++) cin >> e[i].v1 >> e[i].v2 >> e[i].w; for (i = 1; i <= E; i++) pq.insert(i, e[i].w); for (i = 0; i < V-1; ) { if (pq.empty()) break; else m = pq.remove(); if (eq.find(index(e[m].v1),index(e[m].v2),1)) { cout << e[m].v1 << e[m].v2 << ' '; i++; }; } } void search() // PFS, adjacency matrix { int k, t, min = 0; for (k = 1; k <= V; k++) { val[k] = unseen; dad[k] = 0; } val[0] = unseen-1; for (k = 1; k != 0; k = min, min = 0) { val[k] = -val[k]; if (val[k] == -unseen) val[k] = 0; for (t = 1; t <= V; t++) if (val[t] < 0) { if (a[k][t] && (val[t] < -priority)) { val[t] = -priority; dad[t] = k; } if (val[t] > val[min]) min = t; } } }