算法设计与分析: 6-20 推箱子问题

6-20 推箱子问题


问题描述

码头仓库是划分为 n×m 个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中 有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管 理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。 管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空 闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对 面方向推。由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。

对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置, 设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所 需的最少推动次数。

数据输入:
第 1 行有 2 个正整数 n 和 m(1<=n,m<=100), 表示仓库是 n×m 个格子的矩形阵列。接下来有 n 行,每行有 m 个字符,表示格子的状态。
S 表示格子上放了不可移动的沉重货物;
w 表示格子空闲;
M 表示仓库管理员的初始位置;
P 表示箱子的初始位置;
K 表示箱子的目标位置。


Java

package Chapter6FenZhiXianJieFa;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class TuiXiangZi {

    private static class Position{
        int row,col,dir;
    }

    private static int[] op = {1,0,3,2};
    private static int m,n,totm,markr;
    private static int[][] grid,reach,mark,low,totr;
    private static int[][][] comp;
    private static long[][][] ans;
    private static Position start,finish,man;
    private static Position[] offset = new Position[4];
    private static char[][] chars;

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        while (true){

            init(input);

            fifobb();

            out();
        }
    }

    private static void init(Scanner input){
        n = input.nextInt();
        m = input.nextInt();

        grid = new int[n+2][m+2];
        reach = new int[n+1][m+1];
        mark = new int[n+1][m+1];
        low = new int[n+1][m+1];
        totr = new int[n+1][m+1];
        ans = new long[n+1][m+1][4];
        comp = new int[n+1][m+1][10];
        chars = new char[n+1][m+1];

        start = new Position();
        finish = new Position();
        man = new Position();

        for(int i=0; i2; i++)
            for(int j=0; j2; j++)
                grid[i][j] = 0;

        String[] str = new String[n+1];
        for(int i=1; i<=n; i++){
            str[i] = input.next();
            System.arraycopy(str[i].toCharArray(),0,chars[i],1,m);
        }

        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++){
                if(chars[i][j] == 'M') {man.row=i; man.col=j;}
                if(chars[i][j] == 'P') {start.row=i; start.col=j;}
                if(chars[i][j] == 'K') {finish.row=i; finish.col=j;}
                if(chars[i][j] == 'S') grid[i][j]=1;
            }

        //设置方格阵列围墙
        for(int i=0; i<=m+1; i++)
            grid[0][i]=grid[n+1][i]=1;//顶部和底部
        for(int i=0; i<=n+1; i++)
            grid[i][0]=grid[i][m+1]=1;//左翼和右翼

        //初始化相对位移
        for(int i=0; i<4; i++)
            offset[i] = new Position();
        offset[0].row=0; offset[0].col=-1;//左
        offset[1].row=0; offset[1].col=1;//右
        offset[2].row=-1; offset[2].col=0;//上
        offset[3].row=1; offset[3].col=0;//下

        prepro();

        for(int i=0; i<=n; i++)
            for(int j=0; j<=m; j++){
                reach[i][j] = 0;
                for(int k=0; k<4; k++)
                    ans[i][j][k] = Long.MAX_VALUE;
            }

        dfs(man.row,man.col);
    }

    private static void prepro(){
        totm=0;markr=0;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++){
                mark[i][j] = -1;
                low[i][j] = Integer.MAX_VALUE;
                totr[i][j] = 0;
                reach[i][j] = -1;
            }

        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                if(grid[i][j]==0 && mark[i][j]==-1)
                    fill(i,j);
    }

    private static void put(int x, int y, int a, int b){
        if(x==a && y==b) return;
        if(reach[x][y] == 2) return;
        comp[x][y][totr[x][y]] = markr;
        totr[x][y]++;
        reach[x][y] = 2;
        for(int i=0; i<4; i++){
            int x1 = x+offset[i].row;
            int y1 = y+offset[i].col;
            if(grid[x1][y1] == 0) put(x1,y1,a,b);
        }
    }

    private static void fill(int x, int y){
        for(int i=0; i<4; i++){
            int x1 = x+offset[i].row;
            int y1 = y+offset[i].col;
            if(grid[x1][y1] == 0){
                if(mark[x1][y1] == -1){
                    mark[x1][y1] = totm;
                    totm++;
                    fill(x1,y1);
                    low[x][y] = min(low[x][y],low[x1][y1]);
                    if(low[x1][y1] >= mark[x][y]){
                        markr++;
                        put(x1,y1,x,y);
                        comp[x][y][totr[x][y]] = markr;
                        totr[x][y]++;
                        reach[x][y] = 1;
                    }
                }else low[x][y] = min(low[x][y],mark[x1][y1]);
            }
        }
    }

    private static int min(int a, int b){
        return aprivate static boolean connect(int x1, int y1, int x2, int y2){
        for(int i=0; ifor(int j=0; jif(comp[x1][y1][i] == comp[x2][y2][j])
                    return true;

        return false;
    }

    private static void dfs(int x, int y){
        if(reach[x][y] == 1) return;
        reach[x][y] = 1;
        for(int i=0; i<4; i++){
            int x1 = x+offset[i].row;
            int y1 = y+offset[i].col;
            if(grid[x1][y1]==0 &&(x1!=start.row||y1!=start.col))
                dfs(x1,y1);
        }
    }

    private static void fifobb(){
        Queue Q = new LinkedList<>();
        Position here;
        Position nbr;
        for(int i=0; i<4; i++){
            nbr = new Position();
            nbr.row = start.row;
            nbr.col = start.col;
            nbr.dir = i;
            if(ok(start.row+offset[i].row,start.col+offset[i].col)){
                ans[start.row][start.col][i] = 0;
                Q.add(nbr);
            }
        }
        while (!Q.isEmpty()){
            nbr = new Position();
            here = Q.poll();
            int d = here.dir;
            int x = here.row+offset[op[d]].row;
            int y = here.col+offset[op[d]].col;
            if(grid[x][y]==0 && ans[x][y][d]>ans[here.row][here.col][d]+1){
                ans[x][y][d] = ans[here.row][here.col][d]+1;
                nbr.row=x; nbr.col=y; nbr.dir=d;
                Q.add(nbr);
                for(int i=0; i<4; i++)
                    if(i != d){
                        int x1 = x+offset[i].row;
                        int y1 = y+offset[i].col;
                        if(grid[x1][y1]==0 && connect(x1,y1,here.row,here.col) && ans[x][y][i]>ans[x][y][d]){
                            ans[x][y][i] = ans[x][y][d];
                            nbr = new Position();
                            nbr.row=x; nbr.col=y; nbr.dir=i;
                            Q.add(nbr);
                        }
                    }
            }
        }
    }

    private static boolean ok(int a, int b){
        return (grid[a][b]==0 && reach[a][b]==1);
    }

    private static void out(){
        long min=ans[finish.row][finish.col][0];
        for(int i=1; i<4; i++)
            if(ans[finish.row][finish.col][i] < min)
                min=ans[finish.row][finish.col][i];

        if(min == Long.MAX_VALUE)
            System.out.println("No Solution!");
        else
            System.out.println(min);
    }
}

Input & Output

10 12
SSSSSSSSSSSS
SwwwwwwwSSSS
SwSSSSwwSSSS
SwSSSSwwSKSS
SwSSSSwwSwSS
SwwwwwPwwwww
SSSSSSSwSwSw
SSSSSSMwSwww
SSSSSSSSSSSS
SSSSSSSSSSSS
7


100 100
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwSSSSSSSSSSSSSwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwwwwSwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwSSSSSSSSSSSSSwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwwwwSwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwSSSSSSSSSSSwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwwwwSwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwSSSSSSSSSSSwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwwwwSwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSwwSSSSSSSSSSSwwwwSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSwwSSSSSSSSSSSwwwwSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSSSSwwwwSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSwwwwwwwwwwSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSwwwwwwwwwwSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwPwwSSSSSSSSSwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSSwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSwSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSwSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwwSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwwwwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwwwwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSSwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSSwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwwSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwSSwwwwwwwwwwwwSSS
wSwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwSSS
wSwwwwwwSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwSSwwwwwwwwwwwwSSS
wSwwwwwwSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwwwwwwSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSwwwwwwSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSwwwwwwSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSwwwSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwSSSSSSSSSSSSSSSSwwwSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwSSSSSSSSSSSSSSSSwwwSSSSSSSSwwwwwwwwwwwwSSS
wSwwwwwSSSSSSSSSwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSwSSSwwSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwSSwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwwwwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSwwSSwSSwSSwSSSSSSSS
wSwwwwwwwwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwSSSSwwSSwSSwSSwSSSSSSSS
wSwwwwwSSwwwwSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwwSSwwwwwwwwwwwwwwSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwMwwwSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSS
wSwwwwwSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSwwwwSSwwwwwwwwwwwwwwSSSSSS
wSwwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwSSwSSwSSwSSSSSSSS
wSwwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSwwSSwSSwSSwSSSSSSSS
wSwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSwwwwwwwwwwwwwwwwwwwwwwwwwSSwwwwwwwwwSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSwwSSwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSwwwwwwSSwwwSSwSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSwwSSwwwSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSwwwwwwwSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSwSSSSSSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwKSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwSSwwwwSSwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwwwwwwwwwwwwwwwwwwwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
wSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSwwSSSwSSSSwSSSwSSSSwSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
183

Reference

王晓东《计算机算法设计与分析》(第3版)P233

你可能感兴趣的:(Algorithm,分支限界法,Java,计算机算法设计与分析,计算机算法设计与分析)