迷宫

    xiaoxiao2023-12-02  157

    题目描述

    迷宫包含n行m列个小方格,0表示可通行,1表示不可通行。在迷宫的某一位置只能向东南西北四个方向移动。 问题:判断迷宫两点之间是否有路径

    输入

    第一行为n和m,逗号分隔 从第2行到第1+n行,每行一个由0和1组成的长度为m的字符串,代表迷宫的结构 第2+n行 数字k,代表要判断的点对个数 第3+n行到2+n+2k行,每行一个坐标代表点

    输出

    按照顺序判断点对是否可达,输出true或者false

    样例输入

    4 15 110001001111110 101001111101111 010100011101111 111101000000001 4 1 3 3 7 1 7 1 8 1 7 3 7 4 5 4 7

    样例输出

    true true false true

    代码实现
    import java.util.Scanner; public class Main { int n,m,row1,row2,line1,line2; int k;//要判断的对数 char[][]A; int []dx,dy; String[]result; public Main(){ dx=new int[]{-1,1,0,0};//上下左右四个方向 dy=new int[]{0,0,-1,1}; Scanner sc=new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); A=new char[n][m]; for(int i=0;i<n;i++){ String s=sc.next(); for(int j=0;j<m;j++){ A[i][j]=s.charAt(j); } } k=sc.nextInt(); result=new String[k]; for(int t=0;t<k;t++){ row1=sc.nextInt()-1;//题目给出的数组下标是从1开始 line1=sc.nextInt()-1; row2=sc.nextInt()-1; line2=sc.nextInt()-1; for(int i=row1;i<n;i++){ for(int j=line1;j<m;j++) if(A[i][j]=='0') Search(i,j); result[t]=(A[row2][line2]=='2'?"true":"false");//走完看第二组数是否被标记,如果有被标记,说明此路可通 break; } for(int i=0;i<n;i++){//refresh将数组重新变回原来的0 1 for(int j=0;j<m;j++) if(A[i][j]=='2') A[i][j]='0'; } } for(int i=0;i<k;i++){ System.out.println(result[i]); } } void Search(int x,int y){//查找上下左右是否可走 A[x][y]='2'; for(int a=0;a<4;a++){ int tx=x+dx[a],ty=y+dy[a]; if(tx>=0 && tx<n && ty>=0 && ty<m &&A[tx][ty]=='0')//不越界,没有被标记,可以走 Search(tx,ty); } } public static void main(String args[]){ Main c=new Main(); } }
    最新回复(0)