题目:
Til the Cows Come Home
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible. Input * Line 1: Two integers: T and N Output * Line 1: A single integer, the minimum distance that Bessie must travel to get from landmark N to landmark 1. Sample Input 5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100 Sample Output 90 |
给了一个无向图,输入t和n, t代表几个顶点,n代表问的是从第一个顶点到第n的顶点的最短距离,各种最短路算法的模板题
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>
const int INF =0x3f3f3f3f;
const int maxn=1010;
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
int n,t;cin>>n>>t;
int w[maxn][maxn],d[2010],v[2010];
int a,b,c;
for(int i=0;i<t;i++) for(int j=0;j<t;j++) w[i][j]=INF;
for(int i=0;i<n;i++)
{
cin>>a>>b>>c;
if(c<w[a-1][b-1])
{
w[a-1][b-1]=c;
w[b-1][a-1]=w[a-1][b-1];
}
}
memset(v,0,sizeof(v));
for(int i=0;i<t;i++) d[i]=(i==0?0:INF);
for(int i=0;i<t;i++)
{
int x,m=INF;
for(int y=0;y<t;y++) if(!v[y]&&d[y]<=m) m=d[x=y];
v[x]=1;
for(int y=0;y<t;y++)
{
if(!v[y]&&d[x]+w[x][y]<d[y])
d[y]=d[x]+w[x][y];
}
}
cout<<d[t-1]<<endl;
return 0;
}