一道简单的模拟贪吃蛇的题!http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1056
开先一直wa,总觉得自己的算法没错,可是有老是wa,郁闷死了!于是今天下定决心一定要找出bug,在奋斗几个小时后,终于让我找到了,55555555555555,伤心,原来是在判断E时撞到自己身子的时候的输出语句写错了,啊啊啊啊啊啊,丢死人啦,这种低级错误!唉。。。。。
import java.util.Scanner; public class EMain { private static int n; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { n = sc.nextInt(); if (n == 0) break; String str = sc.next(); int[][] board = new int[52][52]; // 初始化 int[][] snake = new int[20][2];// 贪吃蛇 for (int i = 0; i < 20; i++) { snake[i][0] = 25; snake[i][1] = 11 + i; //System.out.println(snake[i][1]); board[25][11 + i] = 1; } go(n, str, snake, board); } } private static void go(int n , String str , int[][] snake , int[][] board) { for (int i = 0; i < n; i++) { char ch = str.charAt(i); if (ch == 'N') { int r = snake[19][0] - 1;// 行 if (r < 1) { //判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int c = snake[19][1];// 列 board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) {//判断头部是否撞到身子 System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'S') { int r = snake[19][0] + 1; if (r > 50) {//判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int c = snake[19][1]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'W') { int c = snake[19][1] - 1; if (c < 1) {//判断是否出界 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int r = snake[19][0]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } else if (ch == 'E') { int c = snake[19][1] + 1; if (c > 50) { System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } int r = snake[19][0]; board[snake[0][0]][snake[0][1]] = 0; if (board[r][c] == 1) { System.out.println("The worm ran into itself on move " + (i + 1) + ".");//就这里写成 System.out.println("The worm ran off the board on move " + (i + 1) + "."); return; } else { board[r][c] = 1; move(snake, r, c); } } // for(int k = 1 ; k < 51 ; k++){ // for(int j = 1 ; j < 51 ;j++ ){ // System.out.print(board[k][j]); // } // System.out.println(); // } } System.out.println("The worm successfully made all " + n + " moves."); } private static void move(int[][] snake, int r, int c) { for (int i = 0; i < 19; i++) { snake[i][0] = snake[i + 1][0]; snake[i][1] = snake[i + 1][1]; } snake[19][0] = r; snake[19][1] = c; } }