/****************************/ /* 縦型探索(深さ優先探索) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stack> using namespace std; void print(stack<char> &q) { printf(" stack の状態: "); if (q.empty()) printf("空です\n"); else printf("先頭: %c, 要素数: %d\n", q.top(), q.size()); } int main() { stack<char> q; printf("S の追加\n"); q.push('S'); print(q); printf("先頭 S を削除し,A, B, C を追加\n"); q.pop(); q.push('A'); q.push('B'); q.push('C'); print(q); printf("先頭 C を削除し,F, G を追加\n"); q.pop(); q.push('F'); q.push('G'); print(q); printf("先頭 G を削除\n"); q.pop(); print(q); printf("先頭 F を削除\n"); q.pop(); print(q); printf("先頭 B を削除\n"); q.pop(); print(q); printf("先頭 A を削除し,D, E を追加\n"); q.pop(); q.push('D'); q.push('E'); print(q); printf("先頭 E を削除\n"); q.pop(); print(q); printf("先頭 D を削除\n"); q.pop(); print(q); return 0; } ----------------再帰関数の利用---------------- /*****************************************/ /* 縦型探索(深さ優先探索) */ /* n : ノードの数 */ /* r : ノードからノードへの接続状況 */ /* node : ノードの名前 */ /* d : 深さ */ /* now : 現在のノード */ /* coded by Y.Suganuma */ /*****************************************/ #include <stdio.h> void depth(int n, int **r, char *node, int d, int now) { int i1; printf("深さ: %d, ノード: %c\n", d, node[now]); if (d < 3) { for (i1 = 0; i1 < n; i1++) { if (r[now][i1] > 0) depth(n, r, node, d+1, i1); } } } int main() { int i1, i2, **r; char *node = "SABCDEFG"; r = new int * [8]; for (i1 = 0; i1 < 8; i1++) { r[i1] = new int [8]; for (i2 = 0; i2 < 8; i2++) r[i1][i2] = 0; } r[0][1] = 1; r[0][2] = 1; r[0][3] = 1; r[1][4] = 1; r[1][5] = 1; r[3][6] = 1; r[3][7] = 1; depth(8, r, node, 1, 0); return 0; }