一、场景

1. General presentation

2.Examples

The file named maze_1.txt has the following contents.

二、题目分析

题目首先给了我们一个迷宫,要我门做两件事:

第一件事:分析迷宫

第二件事:在分析的基础上画迷宫

对于迷宫的分析:

所谓的迷宫只给了我们一些数字,数字的范围是0-3。

0:代表当前这个点与右边和下面都不相连;

1:代表这个点和和右面的点相连;

2:代表这个点和和下面的点相连;

3:代表这个点和下面与右面的点相连。

通过一个二维数组,可以将迷宫的墙确定下来。

在上图中,蓝色的线就是迷宫的墙,所给文件的第一个数字是1,所以在迷宫中,第一行的第一个点和第一行的第二个点相连。

第一件事:分析迷宫:分析六个数据

1.分析迷宫有多少个门,也可以说是迷宫有多少个入口。

2.分析迷宫有多少个墙体集合.

3.分析迷宫有多少不可达区域,也可以说有多少个死角块,也就是某一块是死的,从外面进不来.

4.分析迷宫中有多少个可达区域.

5.分析迷宫中有多少个红叉X

6.分析迷宫有多少条路径即图中黄色路线有多少条

第二件事:画图

1.画蓝线

2.画绿点

3.画红叉

4.画黄线

题目输入与输出要求

输入:

迷宫由数字的文件组成的.

输出:

1.六项分析结果

2.一个latex文件

迷宫的建立来自文件maze_1.txt:

    1  0  2  2  1  2  3  0     3  2  2  1  2  0  2  2     3  0  1  1  3  1  0  0     2  0  3  0  0  1  2  0     3  2  2  0  1  2  3  2     1  0  0  1  1  0  0  0     

以上文件规定了墙体的连线.

三、编写代码

class MazeError(Exception):def __init__(self, value):self.value = valueclass Road:up = Truedown = Trueleft = Trueright = Trueis_border = Falsedef __init__(self, up, down, left, right):self.up = upself.down = downself.left = leftself.right = rightclass Maze:file_name = ""model = [1, 2, 3, 0, "0", "1", "2", "3"]result = [0, 0, 0, 0, 0, 0, 0]  # 记录结果maze = list()  # 最初的迷宫b_maze = list()  # 扩大的迷宫road = list()  # 路径b_road = list()  # 扩大的路径viewed = list()  # 记录路的访问对应第5项viewed6 = list()  # 记录唯一路径的访问对应第6项viewed4 = list()  # 记录路的连通访问对应第4项viewed3 = list()  # 记录封闭点site_view = list()  # 记录点的访问entry = list()  # 记录死角个数death = 0  # 记录封闭路的个数death_list = list()  # 记录封闭路的起点success_path_start = list()  # 记录能够走出去的路径的起始点temp = list()  # 临时存储一条走出去的路径包括的点path = list()  # 存储所有路径的经过的点walls = list()  # 画图的墙pillars = list()  # 画图的点inner_points = list()  # 画X的块entry_exit_paths = list()  # 画路径def __init__(self, file_name):#  读取file到数组maze里面,存储所有墙体信息self.file_name = file_namefile = open(file_name).readlines()for line in file:a = list()for i in line:if i in self.model:a.append(i)if len(a) > 0:self.maze.append(a)# print(self.maze)# 检测maze是否满足条件self.check()# 扩大边界,和初始化点的访问for line in self.maze:b = list()b.append("0")x_site_view = list()x_site_view.append(False)for i in line:b.append(i)x_site_view.append(False)b.append("0")x_site_view.append(False)self.b_maze.append(b)self.site_view.append(x_site_view)tmp = list()for i in range(len(self.maze[0])):tmp.append(False)self.site_view.insert(0, tmp)self.site_view.append(tmp)self.b_maze.insert(0, ["0"] * len(self.b_maze[0]))self.b_maze.append(["0"]*len(self.b_maze[0]))# 根据墙体信息,设置路径信息# 以每个点的左上角的点为基准,读取其余影响该方格的点for y in range(len(self.maze)-1):x_line = list()for x in range(len(self.maze[0])-1):up = Truedown = Trueleft = Trueright = Trueif self.maze[y][x] == '1':up = Falseelif self.maze[y][x] == '2':left = Falseelif self.maze[y][x] == '3':up = Falseleft = Falseif self.maze[y+1][x] == "1" or self.maze[y+1][x] == "3":down = Falseif self.maze[y][x+1] == "2" or self.maze[y][x+1] == "3":right = Falseroad = Road(up, down, left, right)x_line.append(road)self.road.append(x_line)# 扩大路径,并初始化路径的访问for y in self.road:x_line = list()road = Road(True, True, True, True)road.is_border = Truex_line.append(road)for x in y:x_line.append(x)x_line.append(road)self.b_road.append(x_line)temp = list()for _ in self.b_road[0]:road = Road(True, True, True, True)road.is_border = Truetemp.append(road)self.b_road.insert(0, temp)self.b_road.append(temp)# 画图初始化self.pillars.append("% Pillars\n")self.inner_points.append("% Inner points in accessible cul-de-sacs\n")self.entry_exit_paths.append("% Entry-exit paths without intersections\n")def check(self):length = len(self.maze[0])for i in self.maze:if len(i) != length:raise MazeError("Incorrect input.")for i in self.maze[len(self.maze)-1]:if i in ["2", "3"]:raise MazeError("Input does not represent a maze.")for i in range(len(self.maze)):if self.maze[i][len(self.maze[0])-1] in ["3", "1"]:raise MazeError("Input does not represent a maze.")def init_road_view(self):self.viewed = list()self.viewed6 = list()self.viewed4 = list()self.viewed3 = list()for y in self.b_road:x_viewed = list()x_viewed6 = list()x_viewed4 = list()x_viewed3 = list()for _ in y:x_viewed.append(False)x_viewed6.append(False)x_viewed4.append(False)x_viewed3.append(False)self.viewed.append(x_viewed)self.viewed6.append(x_viewed6)self.viewed4.append(x_viewed4)self.viewed3.append(x_viewed3)def analyse(self):self.init_road_view()self.analyse_gates()  # 1self.analyse_wall_sets()  # 2self.analyse_sets()  # 5self.analyse_path()  # 6self.analyse_accessible_areas()  # 4self.analyse_inner_points()  # 3self.print_result()# 分析第一项:分析迷宫有多少个门def analyse_gates(self):# 分四条边考虑count = 0for i in self.road[0]:if i.up is True:count += 1for i in self.road[len(self.road)-1]:if i.down is True:count += 1for j in range(len(self.road)):if self.road[j][0].left is True:count += 1if self.road[j][len(self.road[0])-1].right is True:count += 1self.result[1] = count# 分析第二项:# 深度优先遍历def analyse_wall_sets(self):count = 0for y in range(1, len(self.b_maze)-1):for x in range(1, len(self.b_maze[0])-1):if self.site_view[y][x] is False:if not self.is_inner(y, x):count += 1self.deep(y, x)self.result[2] = countdef deep(self, y, x):if self.site_view[y][x] is True:returnelse:self.site_view[y][x] = True# 检测上面的线if self.b_maze[y-1][x] in ["2", "3"]:self.deep(y-1, x)# 检测左边的线if self.b_maze[y][x-1] in ["1", "3"]:self.deep(y, x-1)# 检测下面和右面的线if self.b_maze[y][x] == "1":self.deep(y, x+1)elif self.b_maze[y][x] == "2":self.deep(y+1, x)elif self.b_maze[y][x] == "3":self.deep(y+1, x)self.deep(y, x+1)else:returndef is_inner(self, i, j):if self.b_maze[i][j] == '0' and self.b_maze[i - 1][j] in ['0', '1'] and self.b_maze[i][j - 1] in ['0', '2']:return Trueelse:return False# 分析第三项:def analyse_inner_points(self):count = 0for i in self.death_list:self.go3(i[2], i[0], i[1])for line in self.viewed3:for i in line:if i is True:count += 1for y in range(1, len(self.b_maze)-1):for x in range(1, len(self.b_maze[0])-1):if not self.not_death_block(y, x):count += 1self.result[3] = count# 找到所有死角块def go3(self, direction, y, x):self.viewed3[y][x] = Truenext_y = ynext_x = xif direction == "up":next_y = y-1next_x = x# 走右面elif direction == "right":next_y = ynext_x = x + 1# 走下面elif direction == "down":next_y = y + 1next_x = x# 走左面elif direction == "left":next_y = ynext_x = x - 1# self.go(direction, y, x - 1)# direction 代表当前点的出口的方向up = Truedown = Trueleft = Trueright = Trueroad = self.b_road[next_y][next_x]if direction == "right" or road.left is False:left = Falseif direction == "left" or road.right is False:right = Falseif direction == "up" or road.down is False:down = Falseif direction == "down" or road.up is False:up = Falsenext_road = Road(up, down, left, right)next_direction = self.is_three_suround(next_road)if next_direction != "no":return self.go3(next_direction, next_y, next_x)elif next_road.up is False and next_road.down is False and next_road.left is False and next_road.right is False:self.viewed3[next_y][next_x] = Truereturn# 分析第四项:共有多少个连通块def analyse_accessible_areas(self):count = 0for y in range(1, len(self.b_road)-1):for x in range(1, len(self.b_road[0])-1):if self.viewed4[y][x] is False:if self.not_death_block(y, x):count += 1self.view(y, x)self.result[4] = count-self.deathdef not_death_block(self, y, x):# 不是四面的死角 返回True 是四面的死角返回Falsereturn self.b_road[y][x].up or self.b_road[y][x].down or self.b_road[y][x].left or self.b_road[y][x].rightdef view(self, y, x):if self.viewed4[y][x] is True:returnself.viewed4[y][x] = Trueif not self.not_death_block(y, x):returnelse:if self.b_road[y][x].is_border is True:returnelse:# 四条路的判定与遍历if self.b_road[y][x].up is True:self.view(y-1, x)if self.b_road[y][x].down is True:self.view(y+1, x)if self.b_road[y][x].left is True:self.view(y, x-1)if self.b_road[y][x].right is True:self.view(y, x+1)# 分析第五项:共有多少个死角# 思路:深度优先遍历def analyse_sets(self):for y in range(1, len(self.b_road)-1):for x in range(1, len(self.b_road[0])-1):if self.viewed[y][x] is True:continuedirection = self.is_three_suround(self.b_road[y][x])if direction != "no":b = self.go(direction, y, x)if b is False:self.death_list.append([y, x, direction])self.result[5] = len(self.entry)def go(self, direction, y, x):self.viewed[y][x] = Truenext_y = ynext_x = xif direction == "up":next_y = y-1next_x = x# 走右面elif direction == "right":next_y = ynext_x = x + 1# 走下面elif direction == "down":next_y = y + 1next_x = x# 走左面elif direction == "left":next_y = ynext_x = x - 1# self.go(direction, y, x - 1)if self.b_road[next_y][next_x].is_border is True:self.entry.append([-2, -2, "end"])return True# direction 代表当前点的出口的方向up = Truedown = Trueleft = Trueright = Trueroad = self.b_road[next_y][next_x]if direction == "right" or road.left is False:left = Falseif direction == "left" or road.right is False:right = Falseif direction == "up" or road.down is False:down = Falseif direction == "down" or road.up is False:up = Falsenext_road = Road(up, down, left, right)next_direction = self.is_three_suround(next_road)if next_direction != "no":return self.go(next_direction, next_y, next_x)elif self.is_two_surround(next_road):the_point = [next_y, next_x, direction]index = self.is_point_in_list(the_point)if index >= 0:# past_direction,direction是两个入口,转化成边之后即可与另一条边构成三环块,然后继续往下走past_direction = self.entry.pop(index)[2]the_direction = self.get_the_direction(past_direction, direction, next_y, next_x)# 找到出口,调用go方法if the_direction != "no":self.go(the_direction, next_y, next_x)# 该点入list,并记录该点的已知入口else:self.entry.append(the_point)return Trueelif next_road.up is False and next_road.down is False and next_road.left is False and next_road.right is False:self.viewed[next_y][next_x] = Trueself.death += 1return Falseelse:self.entry.append([next_y, next_x, "end"])return Truedef is_three_suround(self, road):count = 0direction = "no"if road.up is False:count += 1else:direction = "up"if road.down is False:count += 1else:direction = "down"if road.left is False:count += 1else:direction = "left"if road.right is False:count += 1else:direction = "right"if count == 3:return directionelse:return "no"def is_two_surround(self,road):count = 0if road.up is False:count += 1if road.down is False:count += 1if road.left is False:count += 1if road.right is False:count += 1if count == 2:return Trueelse:return Falsedef is_point_in_list(self, point):b = -1for i in range(len(self.entry)):if self.entry[i][0] == point[0] and self.entry[i][1] == point[1] and self.entry[i][2] != "end":b = ibreakreturn bdef get_the_direction(self, past_direction, direction, next_y, next_x):# 寻找出口up = Truedown = Trueleft = Trueright = Trueif "up" in [past_direction, direction] or self.b_road[next_y][next_x].down is False:down = Falseif "down" in [past_direction, direction] or self.b_road[next_y][next_x].up is False:up = Falseif "right" in [past_direction, direction] or self.b_road[next_y][next_x].left is False:left = Falseif "left" in [past_direction, direction] or self.b_road[next_y][next_x].right is False:right = Falseroad = Road(up, down, left, right)return self.is_three_suround(road)# 分析第六项:共有多少个连通路径def analyse_path(self):# 分四面进入,上面的就从上面进入,下面的就从下面进入,左面从左面进入。count = 0for x1 in range(1, len(self.b_road[0])-1):if self.viewed6[1][x1] is False and self.b_road[1][x1].up is True:if self.cross("up", 1, x1) is True:self.success_path_start.append(["up", 1, x1])count += 1n = len(self.b_road)-2for xn in range(1, len(self.b_road[0])-1):if self.viewed6[n][xn] is False and self.b_road[n][xn].down is True:if self.cross("down", n, xn) is True:self.success_path_start.append(["down", n, xn])count += 1for y1 in range(1, len(self.b_road)-1):if self.viewed6[y1][1] is False and self.b_road[y1][1].left is True:if self.cross("left", y1, 1) is True:self.success_path_start.append(["left", y1, 1])count += 1n2 = len(self.b_road[0])-2for yn in range(1, len(self.b_road) - 1):if self.viewed6[yn][n2] is False and self.b_road[yn][n2].right is True:if self.cross("right", yn, n2) is True:self.success_path_start.append(["right", yn, n2])count += 1self.result[6] = countdef cross(self, direction, y, x):self.viewed6[y][x] = Trueup = Truedown = Trueleft = Trueright = Trueif direction == "left" or self.viewed[y][x-1] is True or self.b_road[y][x].left is False:left = Falseif direction == "right" or self.viewed[y][x+1] is True or self.b_road[y][x].right is False:right = Falseif direction == "down" or self.viewed[y+1][x] is True or self.b_road[y][x].down is False:down = Falseif direction == "up" or self.viewed[y-1][x] is True or self.b_road[y][x].up is False:up = Falseroad = Road(up, down, left, right)next_direction = self.is_three_suround(road)if next_direction != "no":n_direction = ""next_y = ynext_x = xif next_direction == "up":next_y = y - 1next_x = xn_direction = "down"# self.go(direction, y - 1, x)# 走右面elif next_direction == "right":next_y = ynext_x = x + 1n_direction = "left"# self.go(direction, y, x + 1)# 走下面elif next_direction == "down":next_y = y + 1next_x = xn_direction = "up"# self.go(direction, y + 1, x)# 走左面elif next_direction == "left":next_y = ynext_x = x - 1n_direction = "right"# self.go(direction, y, x - 1)if self.b_road[next_y][next_x].is_border is True:return Trueelse:return self.cross(n_direction, next_y, next_x)else:return Falsedef cross2(self, direction, y, x):self.temp.append([x-0.5, y-0.5])up = Truedown = Trueleft = Trueright = Trueif direction == "left" or self.viewed[y][x-1] is True or self.b_road[y][x].left is False:left = Falseif direction == "right" or self.viewed[y][x+1] is True or self.b_road[y][x].right is False:right = Falseif direction == "down" or self.viewed[y+1][x] is True or self.b_road[y][x].down is False:down = Falseif direction == "up" or self.viewed[y-1][x] is True or self.b_road[y][x].up is False:up = Falseroad = Road(up, down, left, right)next_direction = self.is_three_suround(road)if next_direction != "no":n_direction = ""next_y = ynext_x = xif next_direction == "up":next_y = y - 1next_x = xn_direction = "down"# 走右面elif next_direction == "right":next_y = ynext_x = x + 1n_direction = "left"# 走下面elif next_direction == "down":next_y = y + 1next_x = xn_direction = "up"# 走左面elif next_direction == "left":next_y = ynext_x = x - 1n_direction = "right"if self.b_road[next_y][next_x].is_border is True:self.temp.append([next_x-0.5, next_y-0.5])return Trueelse:self.cross2(n_direction, next_y, next_x)else:returndef go2(self, direction, y, x):self.viewed[y][x] = Falsenext_y = ynext_x = xif direction == "up":next_y = y-1next_x = x# self.go(direction, y - 1, x)# 走右面elif direction == "right":next_y = ynext_x = x + 1# self.go(direction, y, x + 1)# 走下面elif direction == "down":next_y = y + 1next_x = x# self.go(direction, y + 1, x)# 走左面elif direction == "left":next_y = ynext_x = x - 1# self.go(direction, y, x - 1)# direction 代表当前点的出口的方向up = Truedown = Trueleft = Trueright = Trueroad = self.b_road[next_y][next_x]if direction == "right" or road.left is False:left = Falseif direction == "left" or road.right is False:right = Falseif direction == "up" or road.down is False:down = Falseif direction == "down" or road.up is False:up = Falsenext_road = Road(up, down, left, right)next_direction = self.is_three_suround(next_road)if next_direction != "no":self.go(next_direction, next_y, next_x)elif next_road.up is False and next_road.down is False and next_road.left is False and next_road.right is False:self.viewed[next_y][next_x] = False# 输出结果def print_result(self):# print(self.result)out_result = list()for i in range(1, 7):if self.result[i] == 0:out_result.append(str('no'))elif self.result[i] == 1:out_result.append(str('a'))else:out_result.append(str(self.result[i]))# 输出print("The maze has "+out_result[0]+" gates. ")print("The maze has "+out_result[1]+" sets of walls that are all connected.")print("The maze has "+out_result[2]+" inaccessible inner point.")print("The maze has "+out_result[3]+" unique accessible area.")print("The maze has "+out_result[4]+" sets of accessible cul-de-sacs that are all connected.")print("The maze has "+out_result[5]+" unique entry-exit path with no intersection not to cul-de-sacs. ")# 展示def display(self):tex_file_name = self.file_name.split('.')[0] + ".tex"tex_file = open(tex_file_name, 'w')head =["\\documentclass[10pt]{article}\n","\\usepackage{tikz}\n","\\usetikzlibrary{shapes.misc}\n","\\usepackage[margin=0cm]{geometry}\n","\\pagestyle{empty}\n","\n","\\tikzstyle{every node}=[cross out, draw, red]\n","\n","\\begin{document}\n","\\vspace*{\\fill}\n","\\begin{center}\n","\\begin{tikzpicture}[x=0.5cm, y=-0.5cm, ultra thick, blue]\n","% Walls\n"]border = ["\\end{tikzpicture}\n","\\end{center}\n","\\vspace*{\\fill}\n","\n","\\end{document}\n"]# 开始画墙for y in range(len(self.maze)):for x in range(len(self.maze[0])):if self.maze[y][x] in ["1", "3"]:x1 = x+1y1 = ys = "    \\draw (" + str(x)+" ,"+str(y)+") -- ("+str(x1)+", "+str(y1)+");\n"self.walls.append(s)if self.maze[y][x] in ["2", "3"]:x1 = xy1 = y+1s = "    \\draw (" + str(x)+" ,"+str(y)+") -- ("+str(x1)+", "+str(y1)+");\n"self.walls.append(s)# 开始画点for i in range(1, len(self.b_maze) - 1):for j in range(1, len(self.b_maze[0]) - 1):if self.is_inner(i, j):s = "    \\fill[green] (" + str(j - 1) + "," + str(i - 1) + ") circle(0.2);\n"self.pillars.append(s)# 开始画pathfor i in self.success_path_start:self.temp = list()if i[0] == "up":self.temp.append([i[2]-0.5, -0.5])elif i[0] == "down":self.temp.append([i[2]-0.5, len(self.b_road) - 1.5])elif i[0] == "left":self.temp.append([-0.5, i[1]-0.5])elif i[0] == "right":self.temp.append([len(self.b_road[0]) - 1.5, i[1]-0.5])self.cross2(i[0], i[1], i[2])self.path.append(self.temp)for i in self.path:for j in range(len(i)-1):s = "    \draw[dashed, yellow] ("+str(i[j][0])+","+str(i[j][1])+") -- ("+str(i[j+1][0])+","+str(i[j+1][1])+");\n"self.entry_exit_paths.append(s)# 开始画 X ,# 1.计算出所有的死块,设置viewedfor i in self.death_list:self.go2(i[2], i[0], i[1])# 2.将所有visited中的点画上Xfor y in range(1, len(self.b_road)-1):for x in range(1, len(self.b_road[0])-1):if self.viewed[y][x] is True:y1 = str(y-0.5)x1 = str(x-0.5)s = "    \\node at ("+x1+","+y1+") {};\n"self.inner_points.append(s)tex_file.writelines(head)tex_file.writelines(self.walls)tex_file.writelines(self.pillars)tex_file.writelines(self.inner_points)tex_file.writelines(self.entry_exit_paths)tex_file.writelines(border)my_maze = Maze('maze_1.txt')
my_maze.analyse()
my_maze.display()

采用递归与栈结合的方式实现迷宫分析与走迷宫(python3)相关推荐

  1. java递归老鼠走迷宫_老鼠走迷宫----------递归问题

    老鼠走迷宫是一个典型的递归的问题,写几个这样的题才可以充分理解递归的过程. 写递归的过程有几点需要注意: (1)递归结束的条件 (2)递归过程的脉络,即逻辑要清晰. / // // 在迷宫中显示老鼠能 ...

  2. java基础—采用递归的方式来获取相关目录下的子目录的名称

    采用递归的方式来获取相关目录下的子目录的名称 import java.io.File;//采用递归的方式来获取D盘下myjava目录下的所有子目录的名称 public class FileListDe ...

  3. 分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数

    分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数 #include #include #define MAXSIZE 50 typedef char datatype; typedef ...

  4. 递归:我不用栈 非递归:栈使我快乐

    偶尔敲代码,今天看树的遍历方式递归和非递归方式实现,碰到了一个关于栈的问题. 栈 栈的定义:栈是限定仅在表头进行插入和删除操作的线性表.要搞清楚这个概念,首先要明白"栈"原来的意思 ...

  5. 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。

    最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...

  6. C/C++面试题—合并两个排序的链表【递归和循环两种方式】

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表, 当然我们需要合成后的链表满足单调不减规则. 解题思路 这道题既可以采用递归的方式,也可以采用循环的方式. 2者的思路都是殊途同归的. 合并 ...

  7. 栈与队列3——用递归和栈操作逆序一个栈

    题目 一个栈依次压入1,2,3:此时栈顶到栈底元素分别为:3,2,1:将栈反转,使得栈顶到栈底元素为:1,2,3,仅限递归函数,并且不能使用其他数据结构 思路 使用两个函数reverse和getAnd ...

  8. ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)

    ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式) 目录 基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两 ...

  9. 算法图解学习笔记02:递归和栈

    计算机内存原理 要说递归和栈的问题,首先就要说下计算机内存的基本原理.简单理解计算机内存原理可以将一台电脑看作超市的存包柜,每个柜子都有柜号(即计算机中的地址,如0x000000f).当需要将数据存储 ...

最新文章

  1. 遭遇ORA-01200错误的原因及解决方法
  2. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)--转
  3. this.$modal.confirm 自定义按钮关闭_Excel迫使人类基因重命名?用VBA给科学家们支一招!—— 怎样快速定制工具栏按钮...
  4. LocalDateTime日期转换错误:JSON parse error: Cannot deserialize value of type java.time.LocalDateTime
  5. GP学习(四)—Running a geoprocessing tool using background geoprocessing
  6. Spring Cloud(5)---基于 Spring Cloud 完整的微服务架构实战
  7. 为什么你还一直在穷打工?
  8. freemarker取数
  9. apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现
  10. android日记论文摘要,(毕业论文)基于android的日记本的设计与开发.doc
  11. 【专栏】核心篇07| Redis “jio”美的集群模式
  12. 网易云发布“工业智能平台”,开放技术赋能工业企业
  13. 题目1205 百万富翁问题
  14. 服务器装系统引导进去系统usb失灵,重装win7后usb全部失灵原因分析以及解决方法(完美解决)...
  15. 解决“Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)“MySQL登录报错问题
  16. 局域网如何共享文件?计算机1通过ip访问计算机2,拿取共享文件。
  17. SpringBoot集成网易企业邮箱,亲测可用
  18. 页目录和页表结构---醍醐灌顶
  19. 计算机考研408每日一题 day76
  20. 阿里正式启动2021届春季校招!java算法工程师,看完跪了

热门文章

  1. 【AITISA 第11次标准会议新一代人工智能产业技术创新战略联盟——AI标准工作组】神经网络压缩组会议
  2. python matplotlib.figure.Figure.add_subplot()方法的使用
  3. dom定义了访问html文档对象的,HTML DOM (文档对象模型)
  4. android router不起作用,给 Arouter 优化的一些小建议
  5. mybatis高级查询
  6. Java类的加载过程详解 面试高频!!!值得收藏!!!
  7. JavaWeb 入门篇(2)Hello Servlet!!!
  8. python高性能服务器编写,Tornado的高性能服务器开发常用方法
  9. Windows 内核驱动签名策略
  10. oracle用户怎么更改空间,ORACLE创建表空间、创建用户、更改用户默认表空间以及授权、查看权限...