POJ 2387 Til the Cows Come Home

题目大意:

给你N个点 T条边, 求N->1的最短路

 

 1 #include <iostream>

 2 #include <cstdlib>

 3 #include <cstdio>

 4 #include <algorithm>

 5 #include <vector>

 6 #include <queue>

 7 using namespace std;

 8 #define INF 0xfffffff

 9 #define maxn 1002

10 

11 struct Edge

12 {

13     int e, w;

14 };

15 

16 vector<Edge> G[1002];

17 bool vis[maxn];

18 int dist[maxn], n, m;;

19 

20 void Init()

21 {

22     for(int i=0; i<=n; i++)

23     {

24         G[i].clear();

25         dist[i] = INF;

26         vis[i] = false;

27     }

28 }

29 int Spfa()

30 {

31     Edge P, Pn;

32     queue<Edge> Q;

33     P.e = n, P.w = 0;

34     dist[n] = 0;

35     Q.push(P);

36 

37     while( !Q.empty() )

38     {

39         P = Q.front();

40         Q.pop();

41 

42         vis[P.e] = false;

43         int len = G[P.e].size();

44 

45         for(int i=0; i<len; i++)

46         {

47             Pn = G[P.e][i];

48 

49             if(dist[Pn.e] > dist[P.e] + Pn.w)

50             {

51                 dist[Pn.e] = dist[P.e] + Pn.w;

52 

53                 if( !vis[Pn.e] )

54                 {

55                     Q.push(Pn);

56                     vis[Pn.e] = true;

57                 }

58             }

59         }

60     }

61     return dist[1];

62 }

63 int main()

64 {

65     Edge P;

66 

67     while(cin >> m >> n)

68     {

69         Init();

70         for(int i=0; i<m; i++)

71         {

72             int a, b ,c;

73 

74             scanf("%d%d%d",&a,&b,&c);

75 

76             P.e = b, P.w = c;

77             G[a].push_back(P);

78             P.e = a;

79             G[b].push_back(P);

80         }

81 

82         int ans = Spfa();

83 

84         cout << ans << endl;

85     }

86     return 0;

87 }

 

你可能感兴趣的:(home)