/****************************/ /* 横型探索(幅優先探索) */ /* coded by Y.Suganuma */ /****************************/ import java.io.*; import java.util.*; class Search { void print(ArrayDeque <Character> q) { System.out.printf(" queue の状態: "); if (q.size() <= 0) System.out.printf("空です\n"); else System.out.printf("先頭及び最後尾: %c %c, 要素数: %d\n", q.peekFirst(), q.peekLast(), q.size()); } void width() { ArrayDeque <Character> q = new ArrayDeque <Character> (); System.out.printf("S の追加\n"); q.add(new Character('S')); print(q); System.out.printf("先頭 S を削除し,A, B, C を追加\n"); q.remove(); q.add('A'); q.add('B'); q.add('C'); print(q); System.out.printf("先頭 A を削除し,D, E を追加\n"); q.remove(); q.add('D'); q.add('E'); print(q); System.out.printf("先頭 B を削除\n"); q.remove(); print(q); System.out.printf("先頭 C を削除し,F, G を追加\n"); q.remove(); q.add('F'); q.add('G'); print(q); System.out.printf("先頭 D を削除\n"); q.remove(); print(q); System.out.printf("先頭 E を削除\n"); q.remove(); print(q); System.out.printf("先頭 F を削除\n"); q.remove(); print(q); System.out.printf("先頭 G を削除\n"); q.remove(); print(q); } } public class Test { public static void main (String[] args) { Search ss = new Search(); ss.width(); } } ----------------再帰関数の利用---------------- /*****************************************/ /* 横型探索(幅優先探索) */ /* n : ノードの数 */ /* r : ノードからノードへの接続状況 */ /* node : ノードの名前 */ /* d : 深さ */ /* m : 深さdにあるノードの数 */ /* nd : 深さdにあるノード */ /* coded by Y.Suganuma */ /*****************************************/ import java.io.*; class Search { void width(int n, int r[][], String node, int d, int m, int nd[]) { int i1, i2, k, m1, nd1[] = new int [n]; System.out.printf("深さ: %d\n", d); for (i1 = 0; i1 < m; i1++) System.out.printf("%s ", node.substring(nd[i1], nd[i1]+1)); System.out.printf("\n"); if (d < 3) { m1 = 0; for (i1 = 0; i1 < m; i1++) { k = nd[i1]; for (i2 = 0; i2 < n; i2++) { if (r[k][i2] > 0) { nd1[m1] = i2; m1++; } } } if (m1 > 0) width(n, r, node, d+1, m1, nd1); } } } public class Test { public static void main (String[] args) { int i1, i2, r[][] = new int [8][8], nd[] = new int [4]; String node = "SABCDEFG"; for (i1 = 0; i1 < 8; i1++) { for (i2 = 0; i2 < 8; i2++) r[i1][i2] = 0; } nd[0] = 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; Search ss = new Search(); ss.width(8, r, node, 1, 1, nd); } }