Операции над матрицей для перечисления всех путей через n-partite график

Я сделал небольшие изменения в вашем коде. Попробуйте это:

package stack;

import java.util.*;
public class Blackjack{

    private int points;
    private int limit;
    private Scanner scan;
    private boolean firstime = true; //new
    boolean gameOver; //new
    private String answer;//new

    public Blackjack(){
        scan = new Scanner(System.in);
    }

    /*Purpose: To print the current points and the limit.
      Input: Points and Limit
      Output: Points and Limit
    */
    public void displayPoints(){
        System.out.println("Your points:" + points+"/"+limit);
    }

   /*Purpose: To ask the user for the game limit.
      Input: Game limit
     Output: Entered limit
    */
    public void startGame(){//Changes
       if(firstime == true) {
            System.out.println("Start Playing?"); 
            answer = scan.next(); 
       }

       switch(answer) {
       case "yes":
           System.out.println("Enter point limit:");
           limit = scan.nextInt();
           int roll = getRoll();
           points = points + roll;
           displayResult();
           break;
       case "no":
           goodBye();
       } 
   }

   //New method
   public void goodBye() {
       System.out.println("Goodbye!");
       scan.close();
   }


   /*Purpose: To get the roll value from rolling a dice
     Input: Nothing
     Output: Random dice number
   */
   public int getRoll(){
       Random r = new Random();
       int roll = r.nextInt(6)+1;
       System.out.println("You rolled:" + roll);

       return roll;
   }   

   /* Purpose: to display the result of points in the game.
      Input: No input.
      Output: amount of points in the game.
   */
   public void displayResult(){//Changes
      if(points == limit) {
          gameOver = true;
          System.out.println("BlackJack!");
          displayPoints();
          System.out.println("Keep playing?");
          answer = scan.next();
      }
      else if (points > limit) {
          gameOver = true;
          System.out.println("Bust!");
          displayPoints();
          System.out.println("Keep playing?");
          answer = scan.next();
      }
      else if (points < limit) {
          gameOver = false;
          System.out.println("Stand at " + points + " points!"); 

      }
   }

   /*Purpose: to play all methods
     Input: none.
     Output: Game results.
   */

   public void play(){//Changes

       startGame();
       ENDWHILE:while(gameOver == true || gameOver == false) {
           if(answer.equals("yes")) {
               firstime = false;
               while(gameOver == true) {
                   points = 0;
                   startGame();
               }
               while(gameOver == false) {           
                   startGame();
               }

           }else {
               break ENDWHILE;
           }
       }

       goodBye();
   }

   public static void main(String [] args){
       Blackjack practice = new Blackjack();
       practice.play();
   }
}
5
задан Devin Jeanpierre 27 February 2009 в 06:28
поделиться

1 ответ

Одна вещь, которую можно сделать, состоит в том, чтобы вычислить энное питание Вас матрица A. Результат скажет Вам сколько путей там длины n от любой вершины до любого другого.

Теперь, если Вы интересуетесь знанием всех вершин вдоль пути, я не думаю, что использование чисто операций над матрицей является способом пойти. Принятие во внимание, что у Вас есть n-partite график, я настроил бы структуру данных следующим образом: (Примите во внимание, что затраты пространства будут дорогими для почти маленьких значений.)

Каждый столбец будет иметь одну запись каждого из узлов в нашем графике. Энный столбец будет содержать 1 в том, если этот узел будет достижим на энном повторении от нашей обозначенной вершины запуска, или запустите набор и обнулите иначе. Каждая запись столбца будет также содержать список обратных указателей к вершинам в n-1 столбце, который привел к этой вершине в энном столбце. (Это похоже на viterbi алгоритм, за исключением того, что мы должны вести список backpointers для каждой записи, а не всего один.) Сложность выполнения это (m^2) *n, где m является количеством вершин в графике, и n является длиной желаемого пути.

Я немного смущен Вашей главной матрицей: с undidrected графиком я ожидал бы, что матрица смежности будет симметрична.

4
ответ дан 14 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: