/**
思路:1.首先读题分析到 这是一个有向图
2.单源点最短路径:确定一个点为源点,其到其他点的最短路径;本题当中
因为是有向图,当没有最短路径就不输出了
分析:示例: 4 4
0 1 1
0 3 1
1 3 1
2 0 1
输出为: 1 1
这是0 到 1 的最短路径和0到3的最短路径 而 0到 2无路径 (2到0有路径)
3.本题我用的是临界矩阵储存数据的,而体现贪心的部分是代码中的更新的部分,每次都找最优解
4.具体代码流程需要自己分析示例图解:这里有我分析的无向图的图解,思路和有向图类似
懂了这个就懂了本题的写码思路了
*/
#include<bits/stdc++.h>
using namespace std;
typedef struct Graph * PtrGraph;
typedef struct Graph{
int Nv;
int Ne;
int Date[2276][2274];
} graph;
int infinite = 99999;
//初始化临界矩阵
void CreateGraph(PtrGraph G){
cin >> G->Nv >> G->Ne;
//初始化临界矩阵
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 k = 0; k < G->Ne; k++){
int i,j,w;
cin >> i >> j >> w;
G->Date[i][j] = w;//这里体现有向图,即从 i 到 j 在临界矩阵中有值,而从j到i无值
}
}
//验证输出临界矩阵
// void print_Graph(PtrGraph G) {
// for(int i = 0; i < G->Nv; i++){
// for(int j = 0; j < G->Nv; j++){
// cout << G->Date[i][j] << ’ ';
// }
// cout << endl;
// }
// }
//核心代码 体现贪心的代码 每次更新均找距离最短的点
void dijkstra(PtrGraph G){
int dist[2001];//用于存储源点到各个点的最短距离
int visited[2001];//用于记录已经访问了哪个点的
for(int i = 0; i < G->Nv; i++){
dist[i] = G->Date[0][i];//题目给出了源点是 0
}
visited[0] = 1;//表示1已经访问过了
//更新
while(1){
int m = -1;
int min = infinite;
for(int i = 0; i < G->Nv; i++){
if(visited[i] != 1 && dist[i] < min){
min = dist[i];
m = i;
}
}
if(m == -1){//如果m无变化,说明图中的各点已经更新完了
break;
}
visited[m] = 1;
for(int i = 0; i < G->Nv; i++){
if(visited[i] != 1 && min + G->Date[m][i] < dist[i]){//这里注意 min + G->Date[m][i]:
//表示了一个源点到其最短的距离(min)的点,
//然后需要判断这个点到其他点的距离加上min和源点到其他点的距离进行比较更新
dist[i] = min + G->Date[m][i];
}
}
}
for(int i = 1; i < G->Nv; i++){
if(dist[i] == infinite)
continue;
else{
cout << dist[i] << ’ ';
}
}
}
int main(){
PtrGraph G = (PtrGraph)malloc(sizeof(struct Graph));
CreateGraph(G);
// print_Graph(G);
dijkstra(G);
}
#include<bits/stdc++.h>
using namespace std;
#define max 20001
struct Node{
int to;//指向边的结点
int val;//边的权值
int next;//指向下一个结点的下标
} node[max];
int head[max],n,m,num = 0;
int infinite = 99999;
//建立邻接表
void add(int from,int to,int val){
num++;
node[num].to = to;
node[num].val = val;
node[num].next = head[from];
head[from] = num;//更新head的值,当再有从from连接的点 它的下一个为 num 坐标
}
//dij算法
void dijkstra(){
int dist[max];
fill(dist, dist + 20001, infinite);
int vis[max] = {0};
for(int i = head[0]; i != 0; i = node[i].next){//这里是选取源点为0的顶点,将和其相连边的权值存进去了
dist[node[i].to] = node[i].val; //比如:0到1:即 node[i].to = 1表示的是顶点, node[i].val = 1 表示0到1这条边的权值为1;dist[1] = 1
}
vis[0] = 1;
while(1){
int m = -1;
int min = infinite;
for(int i = 0; i < n; i++){
if(vis[i] != 1 && dist[i] < min){
min = dist[i];
m = i;
}
}
if(m == -1){//已经遍历完了所有结点
break;
}
vis[m] = 1;
//确定m这个顶点 接下来遍历 m这个结点的链表
for(int i = head[m]; i != 0; i = node[i].next){
if(vis[node[i].to] != 1 && min + node[i].val < dist[node[i].to]){//vis[node[i].to] != 1如果出现 1到2 和2到1这种情况,那么当1已经遍历过,在顶点为2的这个链表中就不用再遍历了
dist[node[i].to] = min + node[i].val;
}
}
}
for(int i = 0; i < n; i++){
if(dist[i] != infinite){
cout << dist[i] << ’ ';
}
}
}
int main(){
memset(head,0,sizeof(head));
cin >> n >> m;
for(int i = 0; i < m; i++){
int from,to,val;
cin >> from >> to >> val;
add(from,to,val);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
分享
这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!
Spring Cloud实战
Spring Boot实战
面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
img.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
分享
这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!
[外链图片转存中…(img-yPwpkX2f-1713057756256)]
Spring Cloud实战
[外链图片转存中…(img-bLxoo1pw-1713057756256)]
Spring Boot实战
[外链图片转存中…(img-q92ykjqC-1713057756256)]
面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!