当前位置: 首页 > news >正文

最短路问题

最短路问题是图论里非常经典的一个考点

接下来着重讲述五种求最短路的算法:朴素版dijkstra算法、堆优化版的dijkstra算法、bellman-ford算法、spfa算法、floyd算法

总体思维导图:

总体思路:

最短路分为两大类
{
在以下给出的时间复杂度中n表示图中的点数,m表示图中的边数

源点就是起点,汇点就是终点
    ①单源最短路{
    求一个点到其它所有点的最短距离,(比如:从1号点到n的最短路问题)。
    ①{
        1、所有边权都是正的
        {
            一、朴素的Dijkstra算法(O(n^2))
            二、堆优化的Dijkstra算法(O(mlogn))
            
            如果图上的边数越稠密(当m和n^2差不多的时候即为稠密图),那么堆优化版的要比朴素版的时间复杂度要高。反之如果边是稀疏的,那么尽量使用堆优化般的。
          
            稠密图用邻接矩阵(矩阵),稀疏图用邻接表(链表)

朴素的Dijkstra板子:
void dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (int i = 0; i < n - 1; i ++ ){int t = -1;     // 在还未确定最短路的点中,寻找距离最小的点for (int j = 1; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] > dist[j]))t = j;// 用t更新其他点的距离for (int j = 1; j <= n; j ++ )dist[j] = min(dist[j], dist[t] + g[t][j]);st[t] = true;}}

堆优化的Dijkstra板子:
int dijkstra()
{dist[1] = 0;priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0, 1});      // first存储距离,second存储节点编号while (heap.size()){auto t = heap.top();heap.pop();int ver = t.second, distance = t.first;if (st[ver]) continue;st[ver] = true;for (int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if (dist[j] > distance + w[i]){dist[j] = distance + w[i];heap.push({dist[j], j});}}}}


        }
        2、存在负权边
        {
            一、Bellman-Ford算法 O(nm)
            二、SPFA   一般情况下O(m),最坏O(nm)。SPFA算法也就是对Bellman-Ford算法的优化,
            若对边数进行了限制就不能使用SPFA算法,只能使用Bellman-ford算法。

一般情况下,题目中不会对边数进行限制,所以99%的情况SPFA算法要比Bellman-ford算法好用的多。

Bellman-Ford板子:备份
struct Edge
{//a,b,w从a走向b的边,权重是wint a,b,w;
}edges[M];int ballman_ford()
{memset(dist,0x3f,sizeof dist);dist[1]=0;//最多经历k次for(int i=0;i<k;i++){//先复制一层,防止串联memcpy(backup,dist,sizeof dist);for(int j=0;j<m;j++){//调用结构体auto e=edges[j];//等于上一个点+权重的值 与 当前这个点到原点的距离最小值dist[e.b]=min(backup[e.a]+e.w,dist[e.b]);}}
SPFA板子:每个被更新的节点都用队列存储进来,注意使用st[ ]来优化,防止重复进入
void spfa()
{dist[1] = 0;queue<int> q;q.push(1);st[1] = true;while (q.size()){auto t = q.front();q.pop();st[t] = false;for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];if (dist[j] > dist[t] + w[i]){dist[j] = dist[t] + w[i];if (!st[j])     // 如果队列中已存在j,则不需要将j重复插入{q.push(j);st[j] = true;}}}}
}


        }
     }
    }
    ②多源汇最短路{
        不会像单源最短路那样只有一个起点。多源汇最短路可能有多个起点,对于多次询问,从其中一个点走到另外一个点的最短路问题,起点和终点都是不确定的
        
        Floyd算法 O(N^3)

Floyd板子:三重循环
void floyd()
{for (int k = 1; k <= n; k ++ )for (int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j ++ )d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}


    }
}

朴素版的dijkstra:  O(MN)

题目:849. Dijkstra求最短路 I - AcWing题库

 本题思路:

到起点的距离:dist[i]。已经确定了最短距离的点的集合:s[i]

第一步 先初始化距离:dist[1]=0,其余的dist[i]= +∞(比较大的数)
因为一开始只有起点的距离是被确定的了,其余的所有点都是不确定的

1号点到n号点最近的距离最近也就是n号点到1号点的距离最近,而由于这里1号点的到起点的距离已经确定所以一开始更新迭代就利用dist[1]已知的条件,来更新其他点到1号点的距离dist[x],然后再更新其他点到点x的距离即可。
这期间如果1号点到n号点的距离已经求出dist[n],且dist[x]<dist[n],那么dist[x]的距离就是确定了的(继续以这点迭代下去)。
如果不小于dist[n],那就没必要继续迭代下去,因为按照x的这条路径的长度会增加,那么就更一定不小于dist[n],所以更新到n号点时,那么n号点到1号点的距离也就最近了

第二步 是一个迭代循环的过程:
for(int i=0,i<n;i++)
{
    t=不在s中的所有点中距离起点最近的点(距离最近的点)
    s⬅t (如果有的话就把t加到s里面去)
    更新dist[i](用t更新,即如果dist[i]>dist[t]+w(w是权重)就用t更新)
}


模拟:

在图论中寻找最短路的大体思维就是这样的,后面的算法也是如此,不在给出

 

 

 

 

代码 
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N=510;int n,m;
int g[N][N];
//到起点的距离
int dist[N];
bool st[N];int dijkstra()
{memset(dist,0x3f,sizeof dist);dist[1]=0;//找到当前没有确定的点当中,距离起点最近的那个点(然后以这个点更新迭代之后的点)//如果已经确定了,那么就和dist[n]进行比较,来确定下一步是继续迭代还是结束这条路径for(int i=0;i<n;i++){int t=-1;for(int j=1;j<=n;j++){if(!st[j] && (t==-1 || dist[t] >dist[j]))//确定dist[j];t=j;}//已经确定了dist[t];st[t]=true;//更新每个点到1号点的距离for(int j=1;j<=n;j++){//使其等于(j号点到1号点的距离)与(t号点到1号点的距离+t号点到j号点距离的最小值)dist[j]=min(dist[j],dist[t]+g[t][j]);}}if(dist[n]==0x3f3f3f3f) return -1;else return dist[n];
}int main()
{cin >> n >> m;//初始化所有点之间的距离都为一个较大的数memset(g,0x3f,sizeof g);while(m--){int a,b,c;cin >> a >> b >> c;//防止重边g[a][b]=min(g[a][b],c);}cout << dijkstra();return 0;
}

 

 堆优化版的dijkstra: O(mlogn)

题目:850. Dijkstra求最短路 II - AcWing题库

 这里是稀疏图,使用邻接表来存

 代码:

/*
n表示图中的点数,m表示图中的边数
一、朴素的Dijkstra算法(O(n^2))
二、堆优化的Dijkstra算法(O(mlogn))使用朴素版的dijkstra必定会爆掉,所以采用堆优化
由于点数和边数大致差不多,所以在这里是稀疏图→使用邻接表来存
这里采用优先队列。
*/#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>using namespace std;typedef pair<int,int> PII;
const int N=150010;
int n,m;
int h[N],w[N],e[N],ne[N],idx;
int dist[N];
bool st[N];void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}int dijkstra()
{dist[1]=0;//这里是小根堆,因为是从一号点开始priority_queue<PII,vector<PII>,greater<PII>> heap;
//这里先放距离,后放点的原因是pair<int,int>类的排序,是先比较的first,如果first相同才比较second//一号点,距离为0先放入队列中heap.push({0,1});while(heap.size()){auto t=heap.top();heap.pop();int ver=t.second,distance=t.first;//如果这个点已经使用过了的话,直接跳过if(st[ver])  continue;st[ver]=true;//使用这个点,以这个点为起点向下遍历//向下遍历,走到ver能走到的所有点for(int i=h[ver];i!=-1;i=ne[i]){//找出点坐标int tt=e[i];/*假设上一个点为x,下一个点为y。如果下一个点到原点的距离(dist[tt])大于(上一个点到原点的距离distance+x到y的距离(w[i]))时,才有更新的价值。*/if(dist[tt]>distance+w[i]){//符合,更新当前点到原点的距离dist[tt]=distance+w[i];//放入队列heap.push({dist[tt],tt});}}}if(dist[n]==0x3f3f3f3f) return -1;return dist[n];
}int main()
{scanf("%d%d",&n,&m);memset(dist,0x3f,sizeof dist);memset(h,-1,sizeof h);while(m--){int a,b,c;scanf("%d%d%d",&a,&b,&c);、//使用链表来存储add(a,b,c);}printf("%d\n",dijkstra());return 0;
}

Bellman-ford算法

题目:853. 有边数限制的最短路 - AcWing题库

代码:
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;//点数,边数
const int N=510,M=10010;
int n,m,k;int dist[N],backup[N];struct Edge
{//a,b,w从a走向b的边,权重是wint a,b,w;
}edges[M];int ballman_ford()
{memset(dist,0x3f,sizeof dist);dist[1]=0;//最多经历k次for(int i=0;i<k;i++){
//复制一份,防止串联memcpy(backup,dist,sizeof dist);for(int j=0;j<m;j++){auto e=edges[j];dist[e.b]=min(backup[e.a]+e.w,dist[e.b]);}}if(dist[n] > 0x3f3f3f3f /2) cout << "impossible" << endl;else cout << dist[n];
}int main()
{cin >> n >> m >> k;for(int i=0;i<m;i++){int a,b,c;cin >> a >> b >> c;edges[i]={a,b,c};}ballman_ford();return 0;
}

 

SPFA算法:

题目:851. spfa求最短路 - AcWing题库

 模拟:

 

代码:
/*
每次将变小了的节点入队,那么用此节点更新后面的节点时才有可能将后面的数值变小
否则,若此节点都没变小,那么后面的节点不一定会因为被此节点更新而变小
即优化的是Bellman-ford算法里的这一步:for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )
这里并不能保证每一次的j循环都有节点被更新,从而增加时间复杂度(公司的总效益涨了,员工的工资才有可能会涨,即前面的点的dist数值减小了,后面的数值才可能会减小)
省去了因为没有被更新而重复的操作
但是如果出题人卡你,时间复杂度和bellman-ford算法一致O(nm),最好的情况为O(m);
*/#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>using namespace std;int n,m;
const int N=1e5+10;
int e[N],ne[N],h[N],idx,w[N];
queue<int> q;
bool st[N];
int dist[N];
//使用链表进行储存
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}void spfa()
{memset(dist,0x3f,sizeof dist);dist[1]=0;q.push(1);//使用过1号节点,则为truest[1]=true;while(q.size()){int t=q.front();q.pop();/*取出来头节点之后,那么在队列中的头节点会被删除,也就需要清空其使用情况以方便下次的入队(只要这个节点变小了,那么就可以用它来再次更新后面的节点)也就是再次入队*/st[t]=false;//从头结点开始遍历,使用队列中的节点依次更新后面的值的大小for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];if(!st[j]){q.push(j);st[j]=true;}}}}//由于每次更新都是由队列里的数来更新,所以如果抵达不到n的话,那么n号点一定没有被更新if(dist[n]==0x3f3f3f3f) cout << "impossible" << endl;else cout << dist[n];
}int main()
{memset(h,-1,sizeof h);cin >> n >>m;while(m--){int a,b,c;cin >> a >> b >> c;add(a,b,c);}spfa();return 0;
}

 题目:852. spfa判断负环 - AcWing题库

这里再寻找最短路时,如若存在负环,那么会一直绕着这个负环来循环(因为这样可以使距离无限变小)

代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>using namespace std;const int N=10010;
int n,m;
int e[N],ne[N],h[N],w[N],idx;
//cnt[]表示当前最短路的边数
int dist[N],cnt[N];
bool st[N];
queue<int> q;void add(int a,int b,int c)
{e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
}bool spfa()
{//负环所在的位置可能是头节点抵达不到的,所以一开始将所有点全部放进队列中for(int i=1;i<=n;i++){//标记为true,表示该节点已经被放进了队列里st[i]=true;q.push(i);}while(q.size()){int t=q.front();q.pop();st[t]=false;for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];cnt[j]=cnt[t]+1;//如果不存在负环的话,那么从一个节点出发后所遍历的边数一定小于n//否则的话就一定存在负环if(cnt[j]>=n) return true;if(!st[i]){q.push(j);st[j]=true;}}}}return false;
}int main()
{memset(h,-1,sizeof h);cin >> n >> m;while(m--){int a,b,c;cin >> a >> b >> c;add(a,b,c);}if(spfa()) puts("Yes");else puts("No");return 0;
}

Floyed算法:

这里的证明使用dp来论证的,建议直接背板子

题目:854. Floyd求最短路 - AcWing题库

代码: 

/*
②多源汇最短路{不会像单源最短路那样只有一个起点。多源汇最短路可能有多个起点,对于多次询问,从其中一个点走到另外一个点的最短路问题,起点和终点都是不确定的Floyd算法 O(N^3)}用邻接矩阵存储所有的边d[][]for(k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j])}}}循环完之后d[i][j]就是从i到j的最短路径
*/#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N=210,INF=1e9;
int d[N][N];
int n,m,Q;void floyd()
{for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}}
}int main()
{cin >> n >> m >> Q;//初始化for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){//自环的距离初始化为0if(i==j) d[i][j]=0;//其余的初始化为正无穷else d[i][j]=INF;}}while(m--){int a,b,c;cin >> a >> b >> c;//对于重边来说取一个最小值即可d[a][b]=min(d[a][b],c);}floyd();while(Q--){int a,b;cin >> a >> b;//存在负权边时距离的大小不等于INFif(d[a][b]>INF/2) cout << "impossible" << endl;else cout << d[a][b] << endl;}return 0;
}

 tips:

图论这一节重在代码实现,很多板子都是互相重复的。

至于该思路如何实现的,可以课下钻研

相关文章:

最短路问题

最短路问题是图论里非常经典的一个考点 接下来着重讲述五种求最短路的算法&#xff1a;朴素版dijkstra算法、堆优化版的dijkstra算法、bellman-ford算法、spfa算法、floyd算法 总体思维导图&#xff1a; 总体思路&#xff1a; 最短路分为两大类 { 在以下给出的时间复杂度中n…...

spark MLlib 中的分类模型

理解这些机器学习模型的数学原理需要一定的数学基础&#xff0c;下面我将简要介绍每个模型的数学原理&#xff0c;并附上相关的数学公式。 1. LinearSVC&#xff08;线性支持向量机&#xff09; 数学原理&#xff1a; 线性支持向量机的目标是找到一个超平面&#xff0c;最大化…...

24上半年报考人数“不增反降”?备考下半年软考的难了......

近日&#xff0c;工信教考发布了一篇《2024年上半年计算机软件资格考试顺利举行》的文章&#xff0c;公布了2024年上半年软考报考人数共计52.77万人&#xff0c;其中&#xff0c;初级资格5.12万人、中级资格24.37万人、高级资格23.28万人。 软考高级占总报名人数的44%&#xf…...

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

介绍 手上有一块立创开发板&#xff0c;本着不吃灰的原则把它用起来&#xff0c;今天就来用它来连接上自己部署的MQTT服务器进行数据通信。 硬件&#xff1a;立创开发板 开发环境&#xff1a;Arduino IDE Win11 MQTT 平台&#xff1a;EMQX Platform 立创开发板介绍&#xff1…...

js平滑滚动元素使其可见

直接上重点&#xff1a; let xpath "//*/div[idxxx]"; document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView({ behavior: "smooth"})这段代码是JavaScript中使用XPath查询文档并执行平…...

TP6 事件绑定、监听、订阅

事件绑定与监听 命令行生成事件类 php think make:event EventDemo 命令行生成事件监听类php think make:listener ListenerDemo 事件类可作为保存与事件相关信息的容器,如没有额外需求可以不需要定义 事件系统的所有操作都通过think\facade\Event类进行静态调用 当定义…...

SpringCloud Gateway中Filters详细说明

前面 https://blog.csdn.net/J080624/article/details/139494909 我们研究了GateWay中各种路由断言的使用。SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。 官网地址&#xff1a;SpringCloud Gateway Filter 【1】GatewayFilter Factories 路由过滤器允…...

力扣2156.查找给定哈希值的子串

力扣2156.查找给定哈希值的子串 rolling hash&#xff1a;求带权的值 左边是高位 右边是低位 本题要求左边低位 只要反向求即可 class Solution {public:string subStrHash(string s, int power, int modulo, int k, int hashValue) {int n s.size();long long M modulo,p…...

推荐低成本低功耗的纯数字现场可重构IC

CPLD采用CMOS EPROM、EEPROM、快闪存储器和SRAM等编程技术&#xff0c;从而构成了高密度、高速度和低功耗的可编程逻辑器件。 RAMSUN提供的型号LS98003是通用可配置的数字逻辑芯片&#xff0c;有体积小、超低功耗和高可靠性等特点。客户可以根据自己的功能需求设计芯片&#x…...

解决change事件与blur事件互不影响

<template><div style"margin-top: 40px"><el-selectv-model"form.name"placeholder"请选择名称"clearablefilterableref"selectName"allow-createblur"nameBlur($event)"visible-change"visibleNameCh…...

后端开发面经系列 -- 同程旅行C++一面

同程旅行C一面 公众号&#xff1a;阿Q技术站 文章目录 同程旅行C一面1、sizeof与strlen的区别&#xff1f;2、运算符和函数有什么区别&#xff1f;3、new和malloc&#xff1f;4、内存泄漏与规避方法&#xff1f;5、悬空指针与野指针&#xff1f;6、手撕冒泡排序&#xff1f;7、…...

推荐几个开源的c#的工作流引擎组件

以下是一个.NET Core领域可以推荐使用的流程引擎的表格&#xff1a; 名称 生产厂家 下载地址 支持二开 独立部署 ccflow 济南驰骋信息技术有限公司 https://gitee.com/opencc 是 是 Elsa Elsa Workflows GitHub - elsa-workflows/elsa-core: A .NET workflows li…...

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…...

【JavaScript脚本宇宙】瞬息万变:探索实时Web应用的JavaScript库

鸟瞰实时Web开发&#xff1a;JavaScript库大比拼 前言 随着Web应用程序的发展&#xff0c;实时通讯已成为一个重要的需求。本篇文章将探索六个关键的JavaScript库&#xff0c;这些库为我们提供助力&#xff0c;使得实时Web应用程序的创建成为可能。 欢迎订阅专栏&#xff1a;…...

Java数据结构与算法(有向无环图)

前言 有向无环图&#xff08;Directed Graph&#xff09;是在有向图的基础上&#xff0c;增加无环的检查。 实现原理 使用邻接表表示法实现有向图相对简单明了&#xff0c;步骤也相对简单。 1:首先创建有向图 2.创建顶点 3.顶点间创建边 4.创建边的过程中检查节点是否存…...

QuanTA: 一种新的高秩高效微调范式

QuanTA方法的核心是利用张量操作来模拟量子电路中的门操作。这些张量被设计为仅在特定的轴上应用&#xff0c;类似于量子电路中的单量子比特或双量子比特门。通过这种方式&#xff0c;QuanTA能够以高秩参数化来适应LLMs的权重矩阵。 网址&#xff1a;QuanTA: 一种新的高秩高效微…...

【漏洞复现】用友NC downCourseWare 任意文件读取漏洞

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具&#xff0c;用友NC提供了一系列业务管理模块&#xff0c;包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等&#xff0c;帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC …...

度安讲 | 第二期「安全左移·业务护航」技术沙龙成功举办

当下&#xff0c;“安全左移”作为落地DevSecOps的重要实践之一&#xff0c;已在业界达成共识。DevSecOps作为一种集开发、安全、运维于一体的软件开发和运营模式&#xff0c;强调在敏捷交付下&#xff0c;“安全”在软件开发生命周期的全覆盖贯穿和核心位置。所谓“安全左移”…...

代码片段 | Matlab三维图显示[ R T 0 1] 的最佳方法

% 输入N组RT矩阵 N 4; R zeros(3, 3, N); T zeros(3, N); R(:,:,1) [-0.902608 0.250129 0.350335 ; 0.314198 0.939127 0.138996 ;-0.294242 0.235533 -0.926253 ]; T(:,1) [205.877;2796.02; 907.116];R(:,:,2) [-0.123936 0.643885 0.755018 ;0.816604 0.464468 -0.26…...

2024百度之星 跑步

原题链接&#xff1a;码题集OJ-跑步 题目大意&#xff1a;一个n个人在绕圈跑&#xff0c;第i个人跑一圈的时间是i分钟&#xff0c;每二个人位置相同就会打一次招呼&#xff0c;如果同时来到终点&#xff0c;他们就会停下来&#xff0c;请问会打多少次招呼&#xff1f; 思路&a…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...