amazon 设计 10 puzzle.

class Edge {
    enum Type {
        inner, outer, flat
    }
 
    Piece parent;
    Type type;
 
    boolean fitsWith(Edge type) {
    }; // Inners & outer fit together.
}
 
class Piece {
    Edge left, right, top, bottom;
 
    // 90, 180, etc
    Orientation solvedOrientation = 90;
}
 
class Puzzle {
    // Remaining pieces left to put away.
    Piece[][] pieces;
    Piece[][] solution;
    Edge[] inners, outers, flats;
 
    // We're going to solve this by working our way
    // in-wards, starting with the corners.
    // This is a list of the inside edges.
    Edge[] exposed_edges;
 
    void sort() {
 
        // Iterate through all edges,
        // adding each to inners, outers, etc,
        // as appropriate.
        // Look for the corners—add those to solution.
        // Add each non-flat edge of the corner
        // to exposed_edges.
 
    }
 
    void solve() {
        for (Edge edge1 : exposed_edges) {
            // Look for a match to edge1
            if (edge1.type == Edge.Type.inner) {
                for (Edge edge2 : outers) {
                    if (edge1.fitsWith(edge2)) {
                        // We found a match!
                        // Remove edge1 from
                        // exposed_edges.
                        // Add edge2's piece
                        // to solution.
                        // Check which edges of edge2
                        // are exposed, and add
                        // those to exposed_edges.
                    }
                }
                // Do the same thing,
                // swapping inner & outer.
            }
        }
    }
}

 

posted on 2014-08-12 05:36  brave_bo  阅读(176)  评论(0)    收藏  举报

导航