A23847. 下列Dijkstra算法,假设图graph中顶点数 v、边数 e,则程序的时间复杂度为( )。typedef struct Edge { int in, out; // 从下标in顶点到下标out顶点的边 int len; // 边长度 struct Edge *next; } Edge; // v: 顶点个数, graph: 出边邻接表, start: 起点下标, dis: 输出每个顶点的最短…
单选题
困难
知识点
题目描述
下列Dijkstra算法,假设图graph中顶点数 v、边数 e,则程序的时间复杂度为( )。
typedef struct Edge {
int in, out; // 从下标in顶点到下标out顶点的边
int len; // 边长度
struct Edge *next;
} Edge;
// v: 顶点个数, graph: 出边邻接表, start: 起点下标, dis: 输出每个顶点的最短距离
void dijkstra(int v, Edge *graph[], int start, int *dis) {
const int MAX_DIS = 0x7fffffff;
for (int i = 0; i < v; i++)
dis[i] = MAX_DIS;
dis[start] = 0;
int *visited = new int[v];
for (int i = 0; i < v; i++)
visited[i] = 0;
visited[start] = 1;
for (int t = 0; ; t++) {
int min = MAX_DIS, minv = -1;
for (int i = 0; i < v; i++) {
if (visited[i] == 0 && min > dis[i]) {
min = dis[i];
minv = i;
}
}
if (minv < 0)
break;
visited[minv] = 1;
for (Edge *e = graph[minv]; e != NULL; e = e->next)
if (dis[e->out] > e->len)
dis[e->out] = e->len;
}
delete[] visited;
}选项(单选)
答案解析
详细答案解析为会员权益,按每日次数查看。
开通 / 升级会员
上一题
下一题