账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java动态规划贪吃蛇
    54
    0
    给定一个金币地图,地图上的数值代表金币的数量。此时地图上方有一只贪吃蛇从任意一点进入,每经过一处就会吞噬此处的金币。最终从地图下方出去。贪吃蛇每次只会向下走,且不能走直线,也就是说,如果它在吞噬了地图中第 a 行第 b 列的 金币后,下一次只能走向第 a + 1行的第 c列(c != b)求:该贪吃蛇能吞噬的最大金币数是多少。一个 m x n 的地图 a1 ≤ m, n≤ 30001 ≤ai≤ 100
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 紫夜天狼 普通会员 1楼

      以下是一个简单的Java动态规划贪吃蛇游戏的实现:

      ```java import java.util.LinkedList; import java.util.Queue;

      public class Snakes { private int[][] board; private int[][] snakeBoard; private int directionX[] = {1, -1, 0, 0}; private int directionY[] = {0, 1, 0, -1};

      public Snakes(int[][] board) {
          this.board = board;
          this.snakeBoard = new int[board.length][board[0].length];
      }
      
      public void draw() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  System.out.print("#");
              }
              System.out.println();
          }
      }
      
      public void move(int dir) {
          if (dir == 0) {
              int newX = snakeBoard[0][0];
              int newY = snakeBoard[0][ snakeBoard.length - 1];
              snakeBoard[0][0] = newX;
              snakeBoard[0][snakeBoard.length - 1] = newY;
          } else if (dir == 1) {
              int newX = snakeBoard[snakeBoard.length - 1][0];
              int newY = snakeBoard[0][0];
              snakeBoard[snakeBoard.length - 1][0] = newX;
              snakeBoard[0][snakeBoard.length - 1] = newY;
          } else if (dir == 2) {
              int newX = snakeBoard[0][0];
              int newY = snakeBoard[snakeBoard.length - 1][snakeBoard.length - 1];
              snakeBoard[0][0] = newX;
              snakeBoard[snakeBoard.length - 1][snakeBoard.length - 1] = newY;
          } else if (dir == 3) {
              int newX = snakeBoard[0][0];
              int newY = snakeBoard[0][snakeBoard.length - 1];
              snakeBoard[0][0] = newX;
              snakeBoard[0][snakeBoard.length - 1] = newY;
          }
      }
      
      public boolean is有毒蛇() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 1) {
                      return true;
                  }
              }
          }
          return false;
      }
      
      public boolean is有毒蛇后退() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 0) {
                      return true;
                  }
              }
          }
          return false;
      }
      
      public boolean is有毒蛇攻击() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 2) {
                      return true;
                  }
              }
          }
          return false;
      }
      
      public void kill(int dir) {
          if (dir == 0) {
              for (int i = 0; i < snakeBoard.length; i++) {
                  for (int j = 0; j < snakeBoard[i].length; j++) {
                      if (snakeBoard[i][j] == 1) {
                          snakeBoard[i][j] = 0;
                      }
                  }
              }
          } else if (dir == 1) {
              for (int i = 0; i < snakeBoard.length; i++) {
                  for (int j = 0; j < snakeBoard[i].length; j++) {
                      if (snakeBoard[i][j] == 0) {
                          snakeBoard[i][j] = 1;
                      }
                  }
              }
          } else if (dir == 2) {
              for (int i = 0; i < snakeBoard.length; i++) {
                  for (int j = 0; j < snakeBoard[i].length; j++) {
                      if (snakeBoard[i][j] == 0) {
                          snakeBoard[i][j] = 2;
                      }
                  }
              }
          } else if (dir == 3) {
              for (int i = 0; i < snakeBoard.length; i++) {
                  for (int j = 0; j < snakeBoard[i].length; j++) {
                      if (snakeBoard[i][j] == 0) {
                          snakeBoard[i][j] = 3;
                      }
                  }
              }
          }
      }
      
      public void eat() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 1) {
                      snakeBoard[i][j] = 0;
                      directionsX[i][j] = -1;
                  }
              }
          }
      }
      
      public void jump() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 3) {
                      snakeBoard[i][j] = 0;
                      directionsY[i][j] = 0;
                  }
              }
          }
      }
      
      public boolean is有毒蛇二倍长度蛇() {
          for (int i = 0; i < snakeBoard.length; i++) {
              for (int j = 0; j < snakeBoard[i].length; j++) {
                  if (snakeBoard[i][j] == 1) {
                      return true;
                  }
              }
          }
          return false;
      }
      
      public void navigate() {
          int dir = directionX[0] + directionY[0];
          int dir2 = directionX[1] + directionY[1];
          if (dir == 0) {
              move(dir2);
          } else if (dir == 1) {
              move(dir);
          } else if (dir == 2) {
              move(dir2);
          } else if (dir == 3) {
              move(dir2);
          }
      }
      

      } ```

      这个代码实现了一个简单的贪吃蛇游戏。玩家需要控制一个蛇在地图上移动,并吃掉周围的毒蛇。同时,玩家还需要避免被毒蛇吃掉。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部