79求调 7,13,15过不去
查看原帖
79求调 7,13,15过不去
1226728
liuliubanban111楼主2025/2/5 15:22
import java.util.LinkedList;

import java.util.Scanner;
class node{
    int x,y,step;
    char c;
    boolean vis;
    int x1=-1,y1=-1,x2=-1,y2=-1;
    node(int x,int y,char c) {
        this.x=x;
        this.y=y;
        this.c=c;
    }
}
class mat{
    int x1=-1,y1=-1,x2=-1,y2=-1;
}
public class Main  {
    static int N,M;
    static int[] dx={-1,1,0,0},dy={0,0,-1,1};
    static char[][] arr=new char[305][305];
    static node[][] board=new node[305][305];
    static mat[] mats =new mat[26];
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        N=sc.nextInt();
        M=sc.nextInt();
        int x=0,y=0;
        for(int i=0;i<26;i++){
            mats[i]=new mat();
        }
        for(int i=0;i<N;i++) {
            arr[i]=sc.next().toCharArray();
            for(int j=0;j<arr[i].length;j++) {
                board[i][j]=new node(i,j,arr[i][j]);
                if(arr[i][j]=='@') {
                    x=i;y=j;
                }
                if(arr[i][j]>='A'&&arr[i][j]<='Z') {
                    int q=arr[i][j]-'A';
                    if(mats[q].x1==-1) {
                        mats[q].x1=i;
                        mats[q].y1=j;
                    }else {
                        mats[q].x2=i;
                        mats[q].y2=j;
                    }
                }
            }
        }
        LinkedList<node> queue=new LinkedList<>();
        board[x][y].vis=true;
        queue.addLast(board[x][y]);
        int res=0;
        outerLoop:
        while(!queue.isEmpty()) {
            node p=queue.removeFirst();
            for(int i=0;i<4;i++) {
                int a=p.x+dx[i],b=p.y+dy[i];
                if(a<0||b<0||a>=N||b>=M||arr[a][b]=='#'||board[a][b].vis) continue;
                if(arr[a][b]=='=') {
                    res=p.step+1;
                    break outerLoop;
                }
                if(!(arr[a][b] != '.')){
                    board[a][b].vis=true;
                    board[a][b].step=p.step+1;
                    queue.addLast(board[a][b]);
                }
                if(arr[a][b]>='A'&&arr[a][b]<='Z') {
                    int k=arr[a][b]-'A';
                    if(a==mats[k].x1&&b==mats[k].y1) {
                        board[a][b].step=p.step+1;
                        board[mats[k].x2][mats[k].y2].step=p.step+1;
                        queue.addLast(board[mats[k].x2][mats[k].y2]);
                    }else{
                        board[a][b].step=p.step+1;
                        board[mats[k].x1][mats[k].y1].step=p.step+1;
                        queue.addLast(board[mats[k].x1][mats[k].y1]);
                    }

                }
            }
        }
        System.out.println(res);
    }
}
2025/2/5 15:22
加载中...