活跃农民
- 积分
- 579
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-2
- 最后登录
- 1970-1-1
|
![]()
- import java.util.*;
- public class MachineSuccess {
- public static void main(String[] args){
- MachineSuccess m = new MachineSuccess();
- Node n0 = new Node(0);
- Node n1 = new Node(1);
- Node n2 = new Node(2);
- Node n3 = new Node(3);
- Node n4 = new Node(4);
- Node n5 = new Node(5);
- Node n6 = new Node(6);
- Node nFailure = new Node(false);
- Node nSuccess = new Node(true);
- n0.children.add(n1);
- n0.children.add(n4);
- n0.children.add(n5);
- n1.children.add(n2);
- n2.children.add(nSuccess);
- n3.children.add(nFailure);
- n3.children.add(n6);
- n4.children.add(n3);
- n5.children.add(nFailure);
- n6.children.add(n0);
- n6.children.add(nSuccess);
- System.out.println(m.machineState(n0));
- System.out.println(m.machineState(n1));
- System.out.println(m.machineState(n2));
- System.out.println(m.machineState(n3));
- System.out.println(m.machineState(n4));
- System.out.println(m.machineState(n5));
- System.out.println(m.machineState(n6));
- }
- boolean machineState(Node node){
- HashSet<Node> visited = new HashSet<Node>();
- return DFS(node,visited);
- }
- //Assumption 1: Success node and Failure node must be leaf node
- // (a node doesn't have children)
- //Assumption 2: A leaf node(a node doesn't have children) must be
- // either Success node or Failure node
- //e.g. {0->[1,2,3], 2->[0], 3->[1]} doesn't exist
- // because node 1 is leaf node but it is neither Success node nor Failure node
- boolean DFS(Node node, HashSet<Node> visited){
- if(node.val == -1) //if we reach Success node or Failure node
- return node.isSuccess;
- visited.add(node);
- for(Node child : node.children){
- if(!visited.contains(child) && !DFS(child,visited))
- return false;
- }
- return true;
- }
- }
- class Node{
- int val;
- ArrayList<Node> children = new ArrayList<Node>();
- boolean isSuccess;
- Node(int val){
- this.val = val;
- }
- Node(boolean isSuccess){ //we use val = -1 to represent that
- this.val = -1; //this node is either a Success node or Failure node
- this.isSuccess = isSuccess;
- }
- }
复制代码 |
|