743. 网络延迟时间 - 力扣(LeetCode)
cpp
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int n, int k) {
vector<vector<int>> gra(n,vector<int> (n,0x3f3f3f3f));
for(int i=0;i<times.size();i++){
gra[times[i][0]-1][times[i][1]-1]=times[i][2];
}
vector<bool> vis(n,false);
vector<int> dis(n,0x3f3f3f3f);
dis[k-1]=0;
while(true){
int mindis=0x3f3f3f3f;
int index=-1;
for(int i=0;i<n;i++){
if(!vis[i]&&dis[i]<mindis){
index=i;
mindis=dis[i];
}
}
if(index==-1){
break;
}
vis[index]=true;
for(int i=0;i<n;i++){
if(!vis[i]&&gra[index][i]!=0x3f3f3f3f){
dis[i]=min(dis[i],gra[index][i]+dis[index]);
}
}
}
int maxdis=0;
for(int i=0;i<n;i++){
if(dis[i]==0x3f3f3f3f){
return -1;
}
maxdis=max(maxdis,dis[i]);
}
return maxdis;
}
};
1334. 阈值距离内邻居最少的城市 - 力扣(LeetCode)
cpp
class Solution {
public:
int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {
vector<vector<int>> gra(n,vector<int> (n,0x3f3f3f3f));
for(int i=0;i<edges.size();i++){
gra[edges[i][0]][edges[i][1]]=edges[i][2];
gra[edges[i][1]][edges[i][0]]=edges[i][2];
}
for(int i=0;i<n;i++){
gra[i][i]=0;
}
int res=0;
int cnt=n;
for(int p=0;p<n;p++){
vector<bool> vis(n,false);
vector<int> dis(n,0x3f3f3f3f);
dis[p]=0;
while(true){
int mindis=0x3f3f3f3f;
int index=-1;
for(int i=0;i<n;i++){
if(!vis[i]&&dis[i]<mindis){
mindis=dis[i];
index=i;
}
}
if(index==-1){
break;
}
vis[index]=true;
for(int i=0;i<n;i++){
if(!vis[i]&&gra[index][i]!=0x3f3f3f3f){
dis[i]=min(dis[i],dis[index]+gra[index][i]);
}
}
}
int count=-1;
for(int i=0;i<n;i++){
if(dis[i]<=distanceThreshold){
count++;
}
}
if(count<cnt){
cnt=count;
res=p;
}
else if(cnt==count){
res=max(res,p);
}
}
return res;
}
};
2662. 前往目标的最小代价 - 力扣(LeetCode)
cpp
class Solution {
public:
int minimumCost(vector<int>& start, vector<int>& target, vector<vector<int>>& specialRoads) {
vector<vector<int>> point;
point.push_back(start);
point.push_back(target);
for(int i=0;i<specialRoads.size();i++){
point.push_back({specialRoads[i][0],specialRoads[i][1]});
point.push_back({specialRoads[i][2],specialRoads[i][3]});
}
int n=point.size();
vector<vector<int>> gra(n,vector<int> (n,0x3f3f3f3f));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int dx=abs(point[i][0]-point[j][0]);
int dy=abs(point[i][1]-point[j][1]);
gra[i][j]=dx+dy;
}
}
for(int i=0;i<specialRoads.size();i++){
int from=2+i*2;
int to=2+i*2+1;
gra[from][to]=min(gra[from][to],specialRoads[i][4]);
}
vector<bool> vis(n,false);
vector<int> dis(n,0x3f3f3f3f);
dis[0]=0;
while(true){
int mindis=0x3f3f3f3f;
int index=-1;
for(int i=0;i<n;i++){
if(!vis[i]&&dis[i]<mindis){
mindis=dis[i];
index=i;
}
}
if(index==-1){
break;
}
vis[index]=true;
for(int i=0;i<n;i++){
if(!vis[i]){
dis[i]=min(dis[i],gra[index][i]+dis[index]);
}
}
}
return dis[1];
}
};
