路径受阻的 Dijkstra SSSP
Dijkstra SSSP with blocked path
我正在研究这个问题,我决定使用 Dijkstra 算法来解决它。但是,我不确定如何解释从 a 到 b 的阻塞路径以及路径阻塞时如何解释 60 分钟的等待时间。我需要多个 SSSP 来解决这个问题吗?我该如何解决这个问题?
图片来源:新加坡国立大学
我的代码如下:
struct road_tuples{
int u;
int v;
int w;
};
int minDistance(int dist[], bool sptSet[], int V){
int min = INT_MAX;
int min_index;
for(int v = 0; v<V;v++){
if(sptSet[v]==false && dist[v]<=min){
min = dist[v];
min_index = v;
}
}
return min_index;
}
//dijkstra using adj matrix
int minMinutes(int V, int a, int b, int c, int d, int E, road_tuples list){
//create adjacency matrix
int graph[V][V];
//fill in adjacency matrix
for(int i=0;i<E;i++)
graph[list.u][list.v] = list.w;
graph[list.v][list.u] = list.w;
//no path from a to b
graph[a][b] = 0;
graph[b][a] = 0;
//assign source
int src = c;
//will hold shortest distance from src to i
int dist[V];
//sptSet[i] will be true if i included in SSSP
bool sptSet[V];
//init all distances to infinite, set sptSet[i] as false
for(int i =0; i < V; i++){
dist[i] = INT_MAX;
sptSet[i] = false;
}
//set dist from source to itself as 0
dist[src] = 0;
//find shortest path for all vertices
for(int count =0; count< V-1; count++){
int u = minDistance(dist, sptSet, V);
sptSet[u] = true;
for(int v=0; v<V; v++){
if(!sptSet[v] && graph[u][v] && dist[u]!= INT_MAX
&& dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
}
return dist[d];
}
好的,所以你需要做的是找到从机场到目的地的最短路径,然后将路径中的所有边都加上 60,然后从你家开始再次执行迪杰斯特拉算法,然后去办公室。可能有一种更有效的方法可以一次完成,但这会让你开始。
我正在研究这个问题,我决定使用 Dijkstra 算法来解决它。但是,我不确定如何解释从 a 到 b 的阻塞路径以及路径阻塞时如何解释 60 分钟的等待时间。我需要多个 SSSP 来解决这个问题吗?我该如何解决这个问题?
图片来源:新加坡国立大学
我的代码如下:
struct road_tuples{
int u;
int v;
int w;
};
int minDistance(int dist[], bool sptSet[], int V){
int min = INT_MAX;
int min_index;
for(int v = 0; v<V;v++){
if(sptSet[v]==false && dist[v]<=min){
min = dist[v];
min_index = v;
}
}
return min_index;
}
//dijkstra using adj matrix
int minMinutes(int V, int a, int b, int c, int d, int E, road_tuples list){
//create adjacency matrix
int graph[V][V];
//fill in adjacency matrix
for(int i=0;i<E;i++)
graph[list.u][list.v] = list.w;
graph[list.v][list.u] = list.w;
//no path from a to b
graph[a][b] = 0;
graph[b][a] = 0;
//assign source
int src = c;
//will hold shortest distance from src to i
int dist[V];
//sptSet[i] will be true if i included in SSSP
bool sptSet[V];
//init all distances to infinite, set sptSet[i] as false
for(int i =0; i < V; i++){
dist[i] = INT_MAX;
sptSet[i] = false;
}
//set dist from source to itself as 0
dist[src] = 0;
//find shortest path for all vertices
for(int count =0; count< V-1; count++){
int u = minDistance(dist, sptSet, V);
sptSet[u] = true;
for(int v=0; v<V; v++){
if(!sptSet[v] && graph[u][v] && dist[u]!= INT_MAX
&& dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
}
return dist[d];
}
好的,所以你需要做的是找到从机场到目的地的最短路径,然后将路径中的所有边都加上 60,然后从你家开始再次执行迪杰斯特拉算法,然后去办公室。可能有一种更有效的方法可以一次完成,但这会让你开始。