-
Notifications
You must be signed in to change notification settings - Fork 12.3k
Open
Description
本题提交如下代码,不论注释部分是否加上都能通过,但实际上在我的理解看来是必须加上的。
#include<iostream>
#include<vector>
#include<string.h>
#include<queue>
#include<climits>
using namespace std;
int edges[505][505];
bool visited[505];
int main()
{
int n, m;
cin >> n >> m;
memset(edges, 0, sizeof(edges));
memset(visited, false, sizeof(visited));
int s, t, val;
while(m--){
scanf("%d%d%d", &s, &t, &val);
edges[s][t] = val;
}
vector<int>dist(n+1, INT_MAX);
queue<int>q;
q.push(1);
dist[1] = 0;
while(!q.empty()){
int cur = q.front(); q.pop();
visited[cur] = true;
for(int t=1; t<=n; t++){
if(edges[cur][t]==0) continue;
dist[t] = min(dist[t], dist[cur]+edges[cur][t]);
if(!visited[t]) q.push(t);
}
}
// for(int i=1; i<n; i++)
// if(edges[i][n]!=0){
// dist[n] = min(dist[n], dist[i]+edges[i][n]);
// }
if(dist[n] == INT_MAX) cout << -1;
else cout << dist[n];
}
举个例子:
4 4
1 2 2000
1 3 1
3 2 1
2 4 1
Metadata
Metadata
Assignees
Labels
No labels