[snap]frog jump 2D

2333 단어
instant
2D frog jump 버전으로 점프 방향을 오른쪽 또는 아래로 정합니다.
기본적인 사고방식은 순서대로 동태적으로 기획하는 것이어서 다를 것이 없다.단지 두 개의 맵으로 모든 돌을 행과 열로 색인해야 한다.
아래 코드는 나도 검사하지 않았어, 응.
package snapchat;


import java.util.*;

public class FrogJump2D {
    class Point{
        int x;
        int y;
        Point(int x, int y){
            this.x = x;
            this.y = y;
        }
    }
    public boolean canCross(List stones){
        Map> rowsDic = new TreeMap<>();
        Map> colsDic = new TreeMap<>();
        Map> mp = new HashMap<>();


        for(int[] stone : stones){
            int x = stone[0];
            int y = stone[1];

            Point p = new Point(x,y);
            if(!rowsDic.containsKey(x))rowsDic.put(x,new TreeMap());
            if(!colsDic.containsKey(y))colsDic.put(y,new TreeMap());
            rowsDic.get(x).put(y,p);
            colsDic.get(y).put(x,p);
            mp.put(p,new HashSet());

        }

        if(stones.size() <= 1)return true;

        Point start = rowsDic.get(0).get(0);
        mp.get(start).add(0);
        int[] last = stones.get(stones.size() - 1);
        Point end = rowsDic.get(last[0]).get(last[1]);


        for(int row : rowsDic.keySet()){
            for(int col : rowsDic.get(row).keySet()){
                Point p = rowsDic.get(row).get(col);
                for(int step : mp.get(p)){
                    int[] d = new int[]{-1,0,1};
                    for(int i = 0; i < 3; i++){
                        int hor = step + col + d[i];
                        int ver = step + row - 1;

                        if(hor > col && rowsDic.get(row).containsKey(hor)){
                            Point hp = rowsDic.get(row).get(hor);
                            mp.get(hp).add(step + d[i]);
                        }
                        if(ver > row && colsDic.get(col).containsKey(ver)){
                            Point vp = colsDic.get(col).get(ver);
                            mp.get(vp).add(step + d[i]);
                        }
                    }

                }



            }
        }

        return mp.get(end).size() != 0;







    }
}

좋은 웹페이지 즐겨찾기