/****************************/
/* 縦型探索(深さ優先探索) */
/* coded by Y.Suganuma */
/****************************/
import java.io.*;
import java.util.*;
class Search
{
void print(Stack <Character> q) {
System.out.printf(" queue の状態: ");
if (q.size() <= 0)
System.out.printf("空です\n");
else
System.out.printf("先頭: %c, 要素数: %d\n", q.peek(), q.size());
}
void depth()
{
Stack <Character> q = new Stack <Character> ();
q.push(new Character('S'));
print(q);
System.out.printf("先頭 S を削除し,A, B, C を追加\n");
q.pop();
q.push('A');
q.push('B');
q.push('C');
print(q);
System.out.printf("先頭 C を削除し,F, G を追加\n");
q.pop();
q.push('F');
q.push('G');
print(q);
System.out.printf("先頭 G を削除\n");
q.pop();
print(q);
System.out.printf("先頭 F を削除\n");
q.pop();
print(q);
System.out.printf("先頭 B を削除\n");
q.pop();
print(q);
System.out.printf("先頭 A を削除し,D, E を追加\n");
q.pop();
q.push('D');
q.push('E');
print(q);
System.out.printf("先頭 E を削除\n");
q.pop();
print(q);
System.out.printf("先頭 D を削除\n");
q.pop();
print(q);
}
}
public class Test
{
public static void main (String[] args)
{
Search ss = new Search();
ss.depth();
}
}
----------------再帰関数の利用----------------
/*****************************************/
/* 縦型探索(深さ優先探索) */
/* n : ノードの数 */
/* r : ノードからノードへの接続状況 */
/* node : ノードの名前 */
/* d : 深さ */
/* now : 現在のノード */
/* coded by Y.Suganuma */
/*****************************************/
import java.io.*;
class Search
{
void depth(int n, int r[][], String node, int d, int now)
{
int i1;
System.out.printf("深さ: %d, ノード: %s\n", d, node.substring(now, now+1));
if (d < 3) {
for (i1 = 0; i1 < n; i1++) {
if (r[now][i1] > 0)
depth(n, r, node, d+1, i1);
}
}
}
}
public class Test
{
public static void main (String[] args)
{
int i1, i2, r[][] = new int [8][8];
String node = "SABCDEFG";
for (i1 = 0; i1 < 8; i1++) {
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;
Search ss = new Search();
ss.depth(8, r, node, 1, 0);
}
}