递归之小游戏

来源:互联网 发布:mac版fps游戏 编辑:程序博客网 时间:2024/06/06 01:41

首先声明:这是一道错解,现在还在算法刚开始学习的阶段,好多东西搞不通透,代码也没有垒出来,先记录一下,以后再去改正

package Recursion;import java.util.Scanner;public class MiniGame {public static char [][]board;public static int n;public static int m;public static int minStep=100000;public static boolean [][]flag;public static int [][]dirction= {{0,1},{1,0},{0,-1},{-1,0}};public static void main(String args[]) {Scanner scan=new Scanner(System.in);String []ss=scan.nextLine().split(" ");n=Integer.parseInt(ss[0]);m=Integer.parseInt(ss[1]);board=new char[n+2][m+2];//用来记录棋盘上对应的位置是不是有效位置flag=new boolean[n+2][m+2];//把棋盘边上的一圈全部赋上空字符for(int i=0;i<n+2;i++) {for(int j=0;j<m+2;j++) {if(i==0||j==0||i==n-1||j==m-1)board[i][j]=' ';}}//将棋盘上卡片的状态保存到board数组中for(int i=1;i<=n;i++) {String s=scan.nextLine();for(int j=0;j<m;j++) {char c=s.charAt(j);board[i][j+1]=c;}}for(int i=0;i<n+2;i++) {for(int j=0;j<m+2;j++)System.out.print(board[i][j]+" ");System.out.println();}String []sss=scan.nextLine().split(" ");int x1=Integer.parseInt(sss[0]);int y1=Integer.parseInt(sss[1]);int x2=Integer.parseInt(sss[2]);int y2=Integer.parseInt(sss[3]);minStep=search(x1,y1,x2,y2,0,-1);if(minStep<100000)System.out.println(minStep);elseSystem.out.println("impossible");}public static int search(int begin_x,int begin_y,int end_x,int end_y,int step,int dir) {//先确定终止条件//已知步骤比已有步骤还要长if(step>minStep)return minStep;//到达了目的地,看是否能够更新步骤数if(begin_x==end_x&&begin_y==end_y&&board[begin_x][begin_y]=='x') {if(step<minStep) {minStep=step;}return minStep;}for(int i=0;i<4;i++) {int x=begin_x+dirction[i][0];int y=begin_y+dirction[i][1];if(x>-1&&x<n+2&&y>-1&&y<m+2&&board[x][y]==' '&&flag[x][y]==false) {flag[x][y]=true;if(dir==i) {search(x,y,end_x,end_y,step,i);}else {search(x,y,end_x,end_y,step+1,i);}flag[x][y]=false;}}return step;}}


原创粉丝点击