5-22 魔方(Rubik’s Cube)问题


问题描述

3×3×33×3×33\times3\times3 魔方的构造如图所示。图中英文字母 U,L,F,R,B,D 分别表示魔方的 6 个面中的上面,左面,前面,右面,后面,底面。魔方的每个面都可以绕其中轴旋转。给定魔 方的初始状态,可以经过若干次旋转将魔方变换成每个面都只有一种颜色的状态。绕中轴将 一个面旋转 90 度算作一次旋转。试设计一个算法计算出从初始状态到目标状态(每个面都 只有一种颜色的状态)所需的最少旋转次数。

设计一个算法,对于给定的 3×3×33×3×33\times3\times3 魔方的初始状态,计算从初始状态到目标状态(每个面 都只有一种颜色的状态)所需的最少旋转次数。

数据输入:
3×3×33×3×33\times3\times3 魔方目标状态的每个面都有一种颜色,分别用大写 英文字母 W,O,G,R,Y,B 来表示。将 6 个面展开并编号如下图所示。文件将给定魔方 的初始状态的 6 个面,按照其编号依次排列,共有 18 行,每行有 3 个表示方块颜色的大写 英文字母。


Java

package Chapter5HuiSuFa;import java.util.Arrays;
import java.util.Scanner;public class MoFangRubiksCube {private static class cubeT{int[] cube = new int[20];}private static final int ID = 0;private static final int FACE_U_CW = 1;private static final int FACE_U_CCW = 2;private static final int FACE_U_180 = 3;private static final int FACE_L_CW = 4;private static final int FACE_L_CCW = 5;private static final int FACE_L_180 = 6;private static final int FACE_F_CW = 7;private static final int FACE_F_CCW = 8;private static final int FACE_F_180 = 9;private static final int CORNER_0_CW = 10;private static final int CORNER_0_CCW = 11;private static final int CORNER_2_CW = 12;private static final int CORNER_2_CCW = 13;private static final int CORNER_5_CW = 14;private static final int CORNER_5_CCW = 15;private static final int CORNER_7_CW = 16;private static final int CORNER_7_CCW = 17;private static final int EDGE_1 = 18;private static final int EDGE_3 = 19;private static final int EDGE_4 = 20;private static final int EDGE_6 = 21;private static final int EDGE_8 = 22;private static final int EDGE_9 = 23;private static int[] lc = {1,2,4,3,1,1,1,5,0,3,2,0,5,4,5,2,4,0,3,2,4,3,0,5};private static int[] rc = new int[24];private static int[] fc = new int[24];private static int[] bc = new int[24];private static int[] uc = new int[24];private static int[] dc = new int[24];private static final int FF = 0;//前面顺时针private static final int FR = 1;//前面逆时针private static final int BF = 2;//后面顺时针private static final int BR = 3;//后面逆时针private static final int LF = 4;//左面顺时针private static final int LR = 5;//左面逆时针private static final int RF = 6;//右面顺时针private static final int RR = 7;//右面逆时针private static final int UF = 8;//上面顺时针private static final int UR = 9;//上面逆时针private static final int DF = 10;//底面顺时针private static final int DR = 11;//底面逆时针private static String[] moveOut = {"F","F-","B","B-","L","L-","R","R-","U","U-","D","D-"};private static int[][] mult;private static int[] res;private static int minmov,maxdepth=100;public static void main(String[] args){Scanner input = new Scanner(System.in);while (true){mult = new int[24][24];res = new int[10000];cubeT x = new cubeT();char[] s = new char[54];String[] str = new String[54];init();for(int i=0; i<54; i++)str[i] = input.next();for(int i=0; i<54; i++)System.arraycopy(str[i].toCharArray(),0,s,i,1);setCube(x,s);outsol(IDsearch(x,maxdepth));}}private static boolean backtrack(int depth, cubeT p){cubeT[] newp = new cubeT[12];boolean result = false;if(depth == 0){if(solved(p)){return true;}elsereturn false;}for(int i=0; i<12; i++){newp[i] = new cubeT();move(p,newp[i],i);result = backtrack(depth-1,newp[i]);if(result){res[depth-1] = i;return true;}}return false;}private static void move(cubeT f, cubeT t, int mv){int[] cube;cube = Arrays.copyOf(f.cube, 20);t.cube = cube;switch (mv){case FF:t.cube[0] = mult[FACE_F_CW][f.cube[5]];t.cube[1] = mult[FACE_F_CW][f.cube[3]];t.cube[2] = mult[FACE_F_CW][f.cube[0]];t.cube[3] = mult[FACE_F_CW][f.cube[6]];t.cube[4] = mult[FACE_F_CW][f.cube[1]];t.cube[5] = mult[FACE_F_CW][f.cube[7]];t.cube[6] = mult[FACE_F_CW][f.cube[4]];t.cube[7] = mult[FACE_F_CW][f.cube[2]];break;case FR:t.cube[5] = mult[FACE_F_CCW][f.cube[0]];t.cube[3] = mult[FACE_F_CCW][f.cube[1]];t.cube[0] = mult[FACE_F_CCW][f.cube[2]];t.cube[6] = mult[FACE_F_CCW][f.cube[3]];t.cube[1] = mult[FACE_F_CCW][f.cube[4]];t.cube[7] = mult[FACE_F_CCW][f.cube[5]];t.cube[4] = mult[FACE_F_CCW][f.cube[6]];t.cube[2] = mult[FACE_F_CCW][f.cube[7]];break;case UF:t.cube[12] = mult[FACE_U_CW][f.cube[0]];t.cube[13] = mult[FACE_U_CW][f.cube[8]];t.cube[14] = mult[FACE_U_CW][f.cube[12]];t.cube[8] = mult[FACE_U_CW][f.cube[1]];t.cube[9] = mult[FACE_U_CW][f.cube[13]];t.cube[0] = mult[FACE_U_CW][f.cube[2]];t.cube[1] = mult[FACE_U_CW][f.cube[9]];t.cube[2] = mult[FACE_U_CW][f.cube[14]];break;case UR:t.cube[0] = mult[FACE_U_CCW][f.cube[12]];t.cube[8] = mult[FACE_U_CCW][f.cube[13]];t.cube[12] = mult[FACE_U_CCW][f.cube[14]];t.cube[1] = mult[FACE_U_CCW][f.cube[8]];t.cube[13] = mult[FACE_U_CCW][f.cube[9]];t.cube[2] = mult[FACE_U_CCW][f.cube[0]];t.cube[9] = mult[FACE_U_CCW][f.cube[1]];t.cube[14] = mult[FACE_U_CCW][f.cube[2]];break;case RF:t.cube[2] = mult[FACE_L_CCW][f.cube[7]];t.cube[9] = mult[FACE_L_CCW][f.cube[4]];t.cube[14] = mult[FACE_L_CCW][f.cube[2]];t.cube[4] = mult[FACE_L_CCW][f.cube[11]];t.cube[16] = mult[FACE_L_CCW][f.cube[9]];t.cube[7] = mult[FACE_L_CCW][f.cube[19]];t.cube[11] = mult[FACE_L_CCW][f.cube[16]];t.cube[19] = mult[FACE_L_CCW][f.cube[14]];break;case RR:t.cube[7] = mult[FACE_L_CW][f.cube[2]];t.cube[4] = mult[FACE_L_CW][f.cube[9]];t.cube[2] = mult[FACE_L_CW][f.cube[14]];t.cube[11] = mult[FACE_L_CW][f.cube[4]];t.cube[9] = mult[FACE_L_CW][f.cube[16]];t.cube[19] = mult[FACE_L_CW][f.cube[7]];t.cube[16] = mult[FACE_L_CW][f.cube[11]];t.cube[14] = mult[FACE_L_CW][f.cube[19]];break;case LF:t.cube[12] = mult[FACE_L_CW][f.cube[17]];t.cube[8] = mult[FACE_L_CW][f.cube[15]];t.cube[0] = mult[FACE_L_CW][f.cube[12]];t.cube[15] = mult[FACE_L_CW][f.cube[10]];t.cube[3] = mult[FACE_L_CW][f.cube[8]];t.cube[17] = mult[FACE_L_CW][f.cube[5]];t.cube[10] = mult[FACE_L_CW][f.cube[3]];t.cube[5] = mult[FACE_L_CW][f.cube[0]];break;case LR:t.cube[17] = mult[FACE_L_CCW][f.cube[12]];t.cube[15] = mult[FACE_L_CCW][f.cube[8]];t.cube[12] = mult[FACE_L_CCW][f.cube[0]];t.cube[10] = mult[FACE_L_CCW][f.cube[15]];t.cube[8] = mult[FACE_L_CCW][f.cube[3]];t.cube[5] = mult[FACE_L_CCW][f.cube[17]];t.cube[3] = mult[FACE_L_CCW][f.cube[10]];t.cube[0] = mult[FACE_L_CCW][f.cube[5]];break;case DF:t.cube[5] = mult[FACE_U_CCW][f.cube[17]];t.cube[6] = mult[FACE_U_CCW][f.cube[10]];t.cube[7] = mult[FACE_U_CCW][f.cube[5]];t.cube[10] = mult[FACE_U_CCW][f.cube[18]];t.cube[11] = mult[FACE_U_CCW][f.cube[6]];t.cube[17] = mult[FACE_U_CCW][f.cube[19]];t.cube[18] = mult[FACE_U_CCW][f.cube[11]];t.cube[19] = mult[FACE_U_CCW][f.cube[7]];break;case DR:t.cube[17] = mult[FACE_U_CW][f.cube[5]];t.cube[10] = mult[FACE_U_CW][f.cube[6]];t.cube[5] = mult[FACE_U_CW][f.cube[7]];t.cube[18] = mult[FACE_U_CW][f.cube[10]];t.cube[6] = mult[FACE_U_CW][f.cube[11]];t.cube[19] = mult[FACE_U_CW][f.cube[17]];t.cube[11] = mult[FACE_U_CW][f.cube[18]];t.cube[7] = mult[FACE_U_CW][f.cube[19]];break;case BF:t.cube[14] = mult[FACE_F_CCW][f.cube[19]];t.cube[13] = mult[FACE_F_CCW][f.cube[16]];t.cube[12] = mult[FACE_F_CCW][f.cube[14]];t.cube[16] = mult[FACE_F_CCW][f.cube[18]];t.cube[15] = mult[FACE_F_CCW][f.cube[13]];t.cube[19] = mult[FACE_F_CCW][f.cube[17]];t.cube[18] = mult[FACE_F_CCW][f.cube[15]];t.cube[17] = mult[FACE_F_CCW][f.cube[12]];break;case BR:t.cube[19] = mult[FACE_F_CW][f.cube[14]];t.cube[16] = mult[FACE_F_CW][f.cube[13]];t.cube[14] = mult[FACE_F_CW][f.cube[12]];t.cube[18] = mult[FACE_F_CW][f.cube[16]];t.cube[13] = mult[FACE_F_CW][f.cube[15]];t.cube[17] = mult[FACE_F_CW][f.cube[19]];t.cube[15] = mult[FACE_F_CW][f.cube[18]];t.cube[12] = mult[FACE_F_CW][f.cube[17]];break;}}private static boolean solved(cubeT x){for(int i=0; i<20; i++)if(x.cube[i] > 0)return false;return true;}private static boolean IDsearch(cubeT x, int maxdepth){for(int t=0; t<=maxdepth; t++){boolean res = backtrack(t,x);if(res){minmov = t;return res;}}return false;}private static void outsol(boolean ress){if(!ress)System.out.println("No Solution!");else{System.out.println(minmov);for(int j=minmov-1; j>=0; j--)System.out.print(moveOut[res[j]]+" ");}}private static void setCube(cubeT x, char[] s){int[][] cube = new int[6][9];int[] colors = new int[256];int i,j;for(i=0; i<20; i++)x.cube[i] = 24;for(i=0; i<6; i++)for(j=0; j<9; j++)cube[i][j] = s[i*9+j];for(i=0; i<256; i++)colors[i] = 255;for(i=0; i<6; i++)colors[cube[i][4]] = i;for(i=0; i<6; i++)for(j=0; j<9; j++)cube[i][j] = colors[cube[i][j]];for(i=0; i<6; i++)for(j=0; j<9; j++)if(cube[i][j] == 255){System.out.println("bad color in cube!");return;}for(i=0; i<24; i++){rc[i] = lc[mult[FACE_U_180][i]];fc[i] = lc[mult[FACE_U_CW][i]];bc[i] = lc[mult[FACE_U_CCW][i]];uc[i] = lc[mult[FACE_F_CCW][i]];dc[i] = lc[mult[FACE_F_CW][i]];}for(i=0; i<24; i++){//角块if(uc[i]==cube[0][6] && lc[i]==cube[1][2] && fc[i]==cube[2][0]) x.cube[0]=i;if(uc[i]==cube[0][8] && fc[i]==cube[2][2] && rc[i]==cube[3][0]) x.cube[2]=i;if(lc[i]==cube[1][8] && fc[i]==cube[2][6] && dc[i]==cube[5][0]) x.cube[5]=i;if(fc[i]==cube[2][8] && rc[i]==cube[3][6] && dc[i]==cube[5][2]) x.cube[7]=i;if(uc[i]==cube[0][0] && lc[i]==cube[1][0] && bc[i]==cube[4][2]) x.cube[12]=i;if(uc[i]==cube[0][2] && rc[i]==cube[3][2] && bc[i]==cube[4][0]) x.cube[14]=i;if(lc[i]==cube[1][6] && bc[i]==cube[4][8] && dc[i]==cube[5][6]) x.cube[17]=i;if(rc[i]==cube[3][8] && bc[i]==cube[4][6] && dc[i]==cube[5][8]) x.cube[19]=i;//边块if(uc[i]==cube[0][7] && fc[i]==cube[2][1]) x.cube[1]=i;if(lc[i]==cube[1][5] && fc[i]==cube[2][3]) x.cube[3]=i;if(fc[i]==cube[2][5] && rc[i]==cube[3][3]) x.cube[4]=i;if(fc[i]==cube[2][7] && dc[i]==cube[5][1]) x.cube[6]=i;if(uc[i]==cube[0][3] && lc[i]==cube[1][1]) x.cube[8]=i;if(uc[i]==cube[0][5] && rc[i]==cube[3][1]) x.cube[9]=i;if(lc[i]==cube[1][7] && dc[i]==cube[5][3]) x.cube[10]=i;if(rc[i]==cube[3][7] && dc[i]==cube[5][5]) x.cube[11]=i;if(uc[i]==cube[0][1] && bc[i]==cube[4][1]) x.cube[13]=i;if(lc[i]==cube[1][3] && bc[i]==cube[4][5]) x.cube[15]=i;if(rc[i]==cube[3][5] && bc[i]==cube[4][3]) x.cube[16]=i;if(bc[i]==cube[4][7] && dc[i]==cube[5][7]) x.cube[18]=i;}for(i=0; i<20; i++)if(x.cube[i] == 24){System.out.println("bad cube description!");return;}}private static void init(){cubeT x = new cubeT();cubeT y = new cubeT();for(int i=0; i<24; i++)for(int j=0; j<24; j++){for(int k=0; k<20; k++)x.cube[k] = k;smove(x,j);smove(x,i);for(int p=0; p<24; p++){for(int k=0; k<20; k++)y.cube[k] = k;smove(y,p);if(equal(x,y)){mult[i][j] = p;break;}}}}private static void smove(cubeT t, int snum){switch (snum){case ID:break;case FACE_U_CW:swap4(t,0,12,14,2);swap4(t,1,8,13,9);swap4(t,3,15,16,4);swap4(t,5,17,19,7);swap4(t,6,10,18,11);break;case FACE_U_CCW:swap4(t,0,2,14,12);swap4(t,1,9,13,8);swap4(t,3,4,16,15);swap4(t,5,7,19,17);swap4(t,6,11,18,10);break;case FACE_U_180:swap2(t,0,14);swap2(t,1,13);swap2(t,2,12);swap2(t,3,16);swap2(t,4,15);swap2(t,5,19);swap2(t,6,18);swap2(t,7,17);swap2(t,8,9);swap2(t,10,11);break;case FACE_L_CW:swap4(t,0,5,17,12);swap4(t,3,10,15,8);swap4(t,1,6,18,13);swap4(t,2,7,19,14);swap4(t,4,11,16,9);break;case FACE_L_CCW:swap4(t,0,12,17,5);swap4(t,3,8,15,10);swap4(t,1,13,18,6);swap4(t,2,14,19,7);swap4(t,4,9,16,11);break;case FACE_L_180:swap2(t,0,17);swap2(t,1,18);swap2(t,2,19);swap2(t,3,15);swap2(t,4,16);swap2(t,5,12);swap2(t,6,13);swap2(t,7,14);swap2(t,8,10);swap2(t,9,11);break;case FACE_F_CW:swap4(t,0,2,7,5);swap4(t,1,4,6,3);swap4(t,8,9,11,10);swap4(t,12,14,19,17);swap4(t,13,16,18,15);break;case FACE_F_CCW:swap4(t,0,5,7,2);swap4(t,1,3,6,4);swap4(t,8,10,11,9);swap4(t,12,17,19,14);swap4(t,13,15,18,16);break;case FACE_F_180:swap2(t,0,7);swap2(t,1,6);swap2(t,2,5);swap2(t,3,4);swap2(t,8,11);swap2(t,9,10);swap2(t,12,19);swap2(t,13,18);swap2(t,14,17);swap2(t,15,16);break;case CORNER_0_CW:swap3(t,1,3,8);swap3(t,2,5,12);swap3(t,4,10,13);swap3(t,6,15,9);swap3(t,7,17,14);swap3(t,11,18,16);break;case CORNER_0_CCW:swap3(t,1,8,3);swap3(t,2,12,5);swap3(t,4,13,10);swap3(t,6,9,15);swap3(t,7,14,17);swap3(t,11,16,18);break;case CORNER_2_CW:swap3(t,0,14,7);swap3(t,1,9,4);swap3(t,3,13,11);swap3(t,5,12,19);swap3(t,6,8,16);swap3(t,10,15,18);break;case CORNER_2_CCW:swap3(t,0,7,14);swap3(t,1,4,9);swap3(t,3,11,13);swap3(t,5,19,12);swap3(t,6,16,8);swap3(t,10,18,15);break;case CORNER_5_CW:swap3(t,0,7,17);swap3(t,1,11,15);swap3(t,2,19,12);swap3(t,3,6,10);swap3(t,4,18,8);swap3(t,9,16,13);break;case CORNER_5_CCW:swap3(t,0,17,7);swap3(t,1,15,11);swap3(t,2,12,19);swap3(t,3,10,6);swap3(t,4,8,18);swap3(t,9,13,16);break;case CORNER_7_CW:swap3(t,0,14,17);swap3(t,1,16,10);swap3(t,2,19,5);swap3(t,3,9,18);swap3(t,4,11,6);swap3(t,8,13,15);break;case CORNER_7_CCW:swap3(t,0,17,14);swap3(t,1,10,16);swap3(t,2,5,19);swap3(t,3,18,9);swap3(t,4,6,11);swap3(t,8,15,13);break;case EDGE_1:swap2(t,0,2);swap2(t,3,9);swap2(t,4,8);swap2(t,5,14);swap2(t,6,13);swap2(t,7,12);swap2(t,10,16);swap2(t,11,15);swap2(t,17,19);break;case EDGE_3:swap2(t,0,5);swap2(t,1,10);swap2(t,2,17);swap2(t,4,15);swap2(t,6,8);swap2(t,7,12);swap2(t,9,18);swap2(t,11,13);swap2(t,14,19);break;case EDGE_4:swap2(t,0,19);swap2(t,1,11);swap2(t,2,7);swap2(t,3,16);swap2(t,5,14);swap2(t,6,9);swap2(t,8,18);swap2(t,10,13);swap2(t,12,17);break;case EDGE_6:swap2(t,0,19);swap2(t,1,18);swap2(t,2,17);swap2(t,3,11);swap2(t,4,10);swap2(t,5,7);swap2(t,8,16);swap2(t,9,15);swap2(t,12,14);break;case EDGE_8:swap2(t,0,12);swap2(t,1,15);swap2(t,2,17);swap2(t,3,13);swap2(t,4,18);swap2(t,5,14);swap2(t,6,16);swap2(t,7,19);swap2(t,9,10);break;case EDGE_9:swap2(t,0,19);swap2(t,1,16);swap2(t,2,14);swap2(t,3,18);swap2(t,4,13);swap2(t,5,17);swap2(t,6,15);swap2(t,7,12);swap2(t,8,11);break;}}private static void swap2(cubeT t, int a, int b){int A = t.cube[a];int B = t.cube[b];t.cube[b] = A;t.cube[a] = B;}private static void swap3(cubeT t, int a, int b, int c){int A = t.cube[a];int B = t.cube[b];int C = t.cube[c];t.cube[b] = A;t.cube[c] = B;t.cube[a] = C;}private static void swap4(cubeT t, int a, int b, int c, int d){int A = t.cube[a];int B = t.cube[b];int C = t.cube[c];int D = t.cube[d];t.cube[b] = A;t.cube[c] = B;t.cube[d] = C;t.cube[a] = D;}private static boolean equal(cubeT x, cubeT y){for(int i=0; i<20; i++)if(x.cube[i] != y.cube[i])return false;return true;}
}

Input & Output

G W W
G W W
G R R
W W W
O O O
O O O
O G G
B G G
B G G
B R R
B R R
B R R
Y Y R
Y Y W
Y Y W
Y O O
Y B B
Y B B
2
L F B W O
B W G
B B Y
R R R
O O O
Y Y Y
G G B
Y G B
R O B
O R G
O R G
O R G
W R Y
W Y G
W Y O
W W G
W B Y
W B R
6
L F F L R- U Y W W
W W G
G G W
O Y W
O O Y
W O O
O O Y
O G G
G B G
O B G
R R R
R W R
R R B
B Y W
Y R R
B Y B
B B G
Y Y B
7
U R F- D- L R- D O W R
G W W
W O W
Y O R
Y O Y
O B O
Y B O
O G G
G W G
G G B
R R G
R R G
Y R W
B Y W
W Y Y
B O B
R B Y
B B R
7
D R F- D- L R- U

Reference

王晓东《计算机算法设计与分析》

算法设计与分析: 5-22 魔方(Rubik's Cube)问题相关推荐

  1. C++算法设计与分析例题代码(基础篇)

    C++算法设计与分析例题代码 前言 一.求1/1!-1/3!+1/5!-1/7!+...+(-1)^(n+1)/(2n-1)! 二.一个数如果恰好等于它的因子之和(包括1,但不包含这个数本身),这个数 ...

  2. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  3. 【算法设计与分析】06 几类重要的函数

    本篇文章中会用到上一篇文章的定理:[算法设计与分析]05 有关函数的渐进的界的定理 主要学习常见的一些函数的阶 1. 基本函数类 以下按阶的高低排序: 至少指数级: 2n, 3n, n!, - 多项式 ...

  4. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  5. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

  6. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

  7. 算法设计与分析(python版)-作业一

    参考教材:算法设计与分析(Python版)         作者:王秋芬 1 . 容易 (4分)2 n=O(100n ^2) 错误 2 . 容易 (3分)10=θ(log10) 正确 3 . 容易 ( ...

  8. Python 算法设计与分析 投资问题

    Python 算法设计与分析 投资问题 投资问题 题目:设有m元钱,n项投资,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,3,-,n.问:如何分配这m元钱,使得投资的总效益最高? ...

  9. 程振波 算法设计与分析_算法设计与分析

    本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...

最新文章

  1. Duilib vlc c++ 字符编码
  2. (Builder)建造者模式的Java实现
  3. 编解码:Base64编码在URL中的应用
  4. python2中如何得到一级域名
  5. git 删除已经 add 的文件 记录
  6. Java高并发之锁优化
  7. 计算机网络基础知识第二章要点
  8. EFCore查缺补漏(一):依赖注入
  9. 数据库基础知识——DQL语言(二)
  10. python sub 第三次_Python学习的第三次的总结
  11. Springboot整合mybatis框架(含实例Demo)
  12. linux常见的查看命令
  13. [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...
  14. 阶梯形矩阵(Echelon Matrix)
  15. python3 爬取百合网的女人们和男人们
  16. 微信视频号视频保存,微信视频号视频下载的方法
  17. usc week 5 计算几何(包含凸包) 队内练习题
  18. 基于Yahoo网站性能优化的34条军规及自己的见解
  19. Java面对对象程序设计——面对对象
  20. 微信视频号从零到月入万元攻略

热门文章

  1. 敏捷迭代就是小瀑布吗?为什么创业团队更敏捷?
  2. 实战演练 | 数据库中检索奇数或偶数行的简单方法
  3. python 正态分布概率_计算正态分布中的概率,给定平均值,std在Python中
  4. 基于 locust/boomer 为核心的简单 http 接口分布式性能测试工具
  5. python爬虫中文不能正常显示问题的解决
  6. .Net插件编程模型:MEF和MAF
  7. 文本代码编辑器UltraEdit v26.00.0.74 中文版下载与破解方法【亲测有效】
  8. android studio购物车开发,2018-03-21 - 购物车项目说明 - 界面功能实现相关
  9. 超级好看的动态官网源码
  10. 如何批量转换文件格式