码头仓库是划分为 n×m 个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中 有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管 理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。 管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空 闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对 面方向推。由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。
对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置, 设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所 需的最少推动次数。
数据输入:
第 1 行有 2 个正整数 n 和 m(1<=n,m<=100), 表示仓库是 n×m 个格子的矩形阵列。接下来有 n 行,每行有 m 个字符,表示格子的状态。
S 表示格子上放了不可移动的沉重货物;
w 表示格子空闲;
M 表示仓库管理员的初始位置;
P 表示箱子的初始位置;
K 表示箱子的目标位置。
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);
}
}
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
王晓东《计算机算法设计与分析》(第3版)P233