最后
权威指南-第一本Docker书
引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。
总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。
关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!
int main(){
PtrGNode G;
G=(PtrGNode)malloc(sizeof(struct GNode));
CreatGNode(G);
Dijkstra(G);
//outprint(G);
}
//2 1 0 1
//20 30
//0 1 2
//6 9 0 3
//10 20 30 40 50 60
//0 1 1
//0 2 3
//0 3 6
//0 4 3
//0 5 2
//1 2 2
//2 3 3
//3 4 3
//4 5 1
=========================================================================================
但这个超时间。我优化了但还是过去
/**
思路:
这个就是单源点最短路径的变形,这里是出现了到达某个顶点出现相同的最短距离,
只不过是经过的点不一样,每个点给了相应的赋值,我们需要判断每一条路径上经过的
点,他们的值相加(每个点赋值),比较最大的那个就是救援队人数最多的,
选取他们作为救援最优路径
*/
#include<bits/stdc++.h>
using namespace std;
#define infinite 9999
typedef struct GNode* PtrGraph;
typedef struct GNode{
int Nv;
int Ne;
int Date[501][501];
}gnode;
int N,M,S,D;
map<int,int>m;//用map容器进行储存每个结点的救援队数量
int path[501] = { S };//将路径的初始值设为开始的那个点
//邻接矩阵储存图
void createGraph(PtrGraph G){
cin >> N >> M >> S >> D;
G->Nv = N;
G->Ne = M;
for( int i = 0; i < N; i++ ){
int temp;
cin >> temp;
m[i] = temp;
}
//矩阵初始化
for( int i = 0; i < G->Nv; i++ ){
for( int j = 0; j < G->Nv; j++ ){
if( i == j )
G->Date[i][j] = 0;
else
G->Date[i][j] = infinite;
}
}
//矩阵赋值
for( int i = 0; i < G->Ne; i++ ){
int a,b,c;
cin >> a >> b >> c;
G->Date[a][b] = c;
G->Date[b][a] = c;
}
}
//输出矩阵
void outPutGNode(PtrGraph G){
int i,j;
for(i=0; iNv; i++){
for(j=0;jNv;j++){
if(G->Date[i][j] == infinite||G->Date[j][i] == infinite)
printf(“∞”);
else
cout << G->Date[i][j] << ’ ';
}
printf(“\n”);
}
}
//求路径上救援队数量
int PathSum( int x ){
int sum = m[x];
while( path[x] != x ){
x = path[x];
sum+=m[x];
}
return sum;
}
//求路径
void PathWay(int x){
stacks;
s.push(x);
while(path[x] != x ){
x = path[x];
s.push(x);
}
while( !s.empty() ){
if( s.size() != 1 )
cout << s.top() << ’ ';
else
cout << s.top();
s.pop();
}
}
//单源点最短路径
void dij(PtrGraph G){
int dist[501] = {0};
int visited[501] = {0};
int vis[501] = {0};
// int path[501] = { S };//将路径的初始值设为开始的那个点
int count[501];//记录路数
for( int i = 0; i < G->Nv; i++ ){
count[i] = 1;//初始化为1,即开始点到每个点的路数为1条
dist[i] = G->Date[S][i];//将开始的那一行赋值给dist
}
visited[S] = 1;
vis[S] = 1;
while(1){
int m = -1;
int min = infinite;
//求取最小值
for(int i = 0; i < G->Nv; i++ ){
if( dist[i] < min && visited[i] != 1){
min = dist[i];
m = i;
}
}
//说明没找到最小值 即代表访问完了,即便图是不连通的 那也求不出最小值了
if( m == -1 ){
break;
}
visited[m] = 1;
//更新
for( int i = 0; i < G->Nv; i++ ){
if( visited[i] != 1 && dist[m] + G->Date[m][i] < dist[i] ){
dist[i] = dist[m] = G->Date[m][i];
path[i] = m;
count[i] = count[m];//如果从开始的点S到 m 有两条路,那么在更新最短路径时
//需要经过m的话,那么m的路数将赋值给 更新的结点
}
}
}
//这个循环主要是处理相同的最短路径
while(1){
int m = -1;
int min = infinite;
//求取最小值
for(int i = 0; i < G->Nv; i++ ){
if( dist[i] < min && vis[i] != 1){
min = dist[i];
m = i;
}
}
//说明没找到最小值 即代表访问完了,即便图是不连通的 那也求不出最小值了
if( m == -1 ){
break;
}
vis[m] = 1;
//出现相同的路径
for( int i = 0; i < G->Nv; i++ ){
if( vis[i] != 1 && dist[m] + G->Date[m][i] == dist[i] ){
count[i] = count[i] + count[m];//更新路数
int temp = path[i];//将原来路径存下来,万一相等的路径,没有原来的路径上救援队人数多 还可以改回来
int a = PathSum(i);
path[i] = m;
int b = PathSum(i);
if( a > b ){//原来的路径人数多
path[D] = temp;//改回原来的路径
}
}
}
}
int Sumrescue = PathSum(D);//救援队数量
cout << count[D] << ’ ’ << Sumrescue << endl;
PathWay(D);
}
int main(){
PtrGraph G = (PtrGraph)malloc(sizeof (struct GNode));
createGraph(G);
dij(G);
}
//4 5 0 3
//20 30 40 10
//0 1 1
//1 3 2
//0 3 3
//0 2 1
//2 3 2
//6 8 0 3
//10 20 30 40 50 60
//0 1 1
//0 2 3
//0 3 6
//0 4 3
//0 5 2
//1 2 2
//3 4 3
//4 5 1
加油boy!
最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)
学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)
除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!
其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)
[外链图片转存中…(img-WSlQcCmh-1715551378181)]
除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!