套模板的最短路问题,就是它是一个无向图,这是一个注意的地方。
用bellman-ford算法不用考虑重边。用迪杰斯特拉要考虑
#include <cstdio>
#include <cstring>
#include <vector>
#define INF 1<<29
using namespace std;
const int MAX = 2010;
struct node
{
int from,to,cost;
node(int f,int t,int c):from(f),to(t),cost(c){};
node(){};
};
int T,N;
int d[MAX];
node edge[MAX];
void bellmanFord(int s){
for (int i = 0; i <= N ; ++i)
{
d[i]=INF;
}
d[s]=0;
int flag=1;
for (int j = 0; j < N ; ++j)
{
for (int i = 1; i <= T ; ++i)
{
if (d[edge[i].from]!=INF&&d[edge[i].to]>d[edge[i].from]+edge[i].cost)
{
d[edge[i].to]=d[edge[i].from]+edge[i].cost;
}
if (d[edge[i].to]!=INF&&d[edge[i].from]>d[edge[i].to]+edge[i].cost)
{
d[edge[i].from]=d[edge[i].to]+edge[i].cost;
}
}
}
}
int main(int argc, char const *argv[])
{
while(scanf("%d%d",&T,&N)!=EOF){
int begins,ends,cost;
for (int i = 1; i <= T; ++i)
{
scanf("%d%d%d",&begins,&ends,&cost);
edge[i].from=begins;
edge[i].to=ends;
edge[i].cost=cost;
}
bellmanFord(1);
printf("%d\n",d[N]);
}
return 0;
}