プログラマメモ2 - programmer no memo2

有向グラフのための手習い 2007/07/01

A={a, b, c, d}の中の関係RがR={(a, a), (a, b), (a, d), (b, a), (b, b), (b, c), (c, a), (c, b), (d, c)}で与えられたとき、これをグラフで表現すると下記イメージとなります。



a, b, c, dをひとつの状態とみたてて、与えられた状態から次の状態へ遷移できるか判定する。


public class TestA {

enum A {
a, b, c, d
};

A[][] R = { { A.a, A.a }, { A.a, A.b }, { A.a, A.d }, { A.b, A.a },
{ A.b, A.b }, { A.b, A.c }, { A.c, A.a }, { A.c, A.b },
{ A.d, A.c } };

A nowState = A.a;

public boolean changeState(A state) {

for (int i = 0; i < R.length; i++) {
if (R[i][0] == nowState && R[i][1] == state) {
nowState = state;
return true;
}
}

return false;
}

public static void main(String[] args) {
TestA testA = new TestA();
A[] as = { A.a, A.d, A.b };
for (A state : as) {
if (!testA.changeState(state)) {
System.out.println("failed change state nowstate["
+ testA.nowState + "] nextstate[" + state + "] ");
break;
}
}

}

}

: