题解 | #仓库配送#
仓库配送
http://www.nowcoder.com/practice/2f266ebdd8ab4408bb5e0c2240453c4c
- 邻接表
- floyd算法
- 注意初始化INT_MAX。表示点和点之间不可达。
- 最后就是从起送点到所有目的地的最长时间(可以理解为一种并行的思想,最长的那个最短,决定送完)
#include<bits/stdc++.h>
using namespace std;
//算出点到点之间的最小路径
int floyd(vector<vector<int>> graph, int N, int source){
for(int k =1; k<= N; k++){
for(int i =1; i<= N;i++){
for(int j =1; j<= N;j++){
if(graph[i][k]!= INT_MAX && graph[k][j] !=INT_MAX ){
graph[i][j] = min(graph[i][j],graph[i][k]+graph[k][j]);
}
}
}
}
int max_ =INT_MIN;
//最小路径中最大的就是最短完成时间。
for(int i = 1; i<= N;i++){
max_ = max(max_,graph[source][i]);
}
if(max_==INT_MAX) return -1;
return max_;
}
int main(){
int N,K,M;
cin>>N>>K>>M;
int v,u,w;
vector<vector<int>> graph(N+1,vector<int>(N+1,INT_MAX));//全部默认不可达
for(int i=0; i< M;i++){//M组数据
cin>>v>>u>>w;
graph[v][u] = w;
}
for(int i=1; i<= N;i++){//对角线要为1
graph[i][i] = 0;
}
cout<<floyd(graph,N,K)<<endl;
return 0;
}
大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结
查看12道真题和解析