如题,P3371 【模板】单源最短路径(弱化版)中代码全AC,在这道题就全RE。。。。
实在是不知道怎么回事了,难不成必须要用堆或优先队列优化?????完全不知道哪里会RE啊!!!
代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
const int INF = pow(2,31)-1;
int dis[10005];
bool visited[10005];
struct Edge {
int topos;
int val;
};
vector<vector<Edge> > graph;
int main() {
int pointnum, edgenum, startid;
cin>> pointnum>>edgenum>> startid;
graph.resize(pointnum+1);
int a, b, val;
for (int i = 1; i <= edgenum; i++) {
cin >>a>>b>>val;
graph[a].push_back(Edge { b, val });
}
for (int i = 1; i <= pointnum; i++) {
if (i == startid) dis[i] = 0;
else dis[i] = INF;
}
for (int _ = 1; _ <= pointnum; _++) {
int pos = 0;
for (int i = 1; i <= pointnum; i++) {
if (!visited[i]&&(pos == 0||dis[i]<dis[pos])) {
pos = i;
}
}
visited[pos] = true;
for (vector<Edge>::iterator edge = graph[pos].begin(); edge != graph[pos].end(); edge++) {
if (!visited[edge->topos] && dis[pos] + edge->val < dis[edge->topos])
dis[edge->topos] = dis[pos] + edge->val;
}
}
for (int i = 1; i <= pointnum; i++) {
cout << dis[i] << " ";
}
return 0;
}