簡體   English   中英

無法找出在圖表中移動的正確算法

[英]Can't figure out correct algorithm for moving within a graph

我以前發過這個問題,但我認為我會修改它並嘗試更多細節。 我在下面有這張圖片。 我想要完成的是從偶數“泡沫”開始,從零和零轉換到其他狀態。 這就是我所完成的:

1)創建具有所有狀態(偶數和奇數)的mainMap以及正確具有遠離該狀態的輸入(0和1)的另一個映射。 2)將狀態從偶數轉換為奇數轉換。

平價

到目前為止,這是我的代碼:

public static void main(String[] args) {

  //Map<Even, ArrayMap[0->even,1->odd]> for first line
  Map<String, Map<String,String>> mainMap = new ArrayMap<String, Map<String,String>>();
 //Map<int,even/odd>

  TypedBufferReader input = new TypedBufferReader("Enter Finite Automaton Description File: ");
 //read the file.
  for (;;) {
     try {
          String line = input.readLine();
          StringTokenizer st = new StringTokenizer(line, ";");
          String  state = st.nextToken();

          Map<String,String> transitions = mainMap.get(state);

          transitions = new ArrayMap<String, String>();
          while (st.hasMoreTokens()) {
              String intStateInput = st.nextToken();
              String inputState = st.nextToken();
              transitions.put(intStateInput, inputState);
          }
        mainMap.put(state, transitions);
     } catch (EOFException e) { break;}
  }

  //Print in alphabetical order of states. odd/even to even/odd
  List<String> mapList = new ArrayList<String>(mainMap.keys());
  Collections.sort(mapList);
  for (String s : mapList) {
      Map<String, String> tempMap = mainMap.get(s);
      System.out.println(s + " transitions = " + tempMap.toString());
  }

  //Process one line file.
  TypedBufferReader oneLineInput = new TypedBufferReader("Enter start state/inputs file: ");

  try {
      String oneLine = oneLineInput.readLine();
      StringTokenizer st = new StringTokenizer(oneLine,";");
      String initialState = st.nextToken();
      System.out.println("Initial state = " + initialState);

      while (st.hasMoreTokens()) {
          String inputNum = st.nextToken();

      }

  } catch (EOFException e) {}



  }

}

我應該按如下方式讀取一行文件:“even; 1; 0; 1; 1; 0; 1”因此,它將打印偶數的初始狀態並繼續通過mainMap移動。

對於初始狀態甚至它將是這樣的:

初始狀態=偶數

input = 1 state = odd

input = 0 state = odd

input = 1 state = even

input = 1 state = odd

input = 0 state = odd

input = 1 state = even

最終狀態=偶數

請幫我解決這個問題。

我認為這很容易做到。你需要記住以前的狀態,所以你要開始

Step 1: prevState = EVEN
Step 2: Read currentState (Read them as Integer)
Step 3: Repeate Until EOF
          if currentState | prevState == 0  then
             state = EVEN
             print EVEN 
          else
             state =  ODD
             print ODD

在循環中,您將獲得鏈接到當前狀態名稱的轉換,然后獲取給定轉換的新狀態的名稱:

while (st.hasMoreTokens()) {
   String inputNum = st.nextToken();          
   Map<String,String> mainMap transitions = mainMap.get(initialState);
   initialState = transitions.get(inputNum);
} 

我也會在currentState中重命名initialSate,但它只是個人偏好:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM