const int INF = 0x3f3f3f3f;
struct Edge
{
int vertex, weight;
};
class Graph
{
private:
int n;
vector<Edge> * edges;
bool * visited;
public:
int * dist;
Graph (int input_n)
{
n = input_n;
edges = new vector<Edge>[n];
dist = new int[n];
visited = new bool[n];
memset(visited, 0, n);
memset(dist, 0x3f, n * sizeof(int));
}
~Graph()
{
delete[] dist;
delete[] edges;
delete[] visited;
}
void insert(int x, int y, int weight)
{
edges[x].push_back(Edge{y, weight});
edges[y].push_back(Edge{x, weight});
}
void dijkstra(int v)
{
dist[v] = 0;
for(int i=0;i<n;i++)
{
int min_dist = INF,min_vertex;
for(int j=0;j<n;j++)
{
if (!visited[j] && dist[j] < min_dist)
{
min_dist = dist[j];
min_vertex = j;
}
}
visited[min_vertex] = 1;
for (Edge &j: edges[min_vertex])
{
if (min_dist + j.weight < dist[j.vertex])
{
dist[j.vertex] = min_dist + j.weight;
}
}
}
}
};
同样,在枚举 edges[ min_vertex ][ j ] 的时候需要替换 j
同样,在枚举 edges[ min_vertex ][ j ] 的时候需要替换 j