Sicily-1024

一. 题意:

有n个节点,n-1条边,并且任意两个节点都连通。模拟一下,实际上是一棵树的便利,求从特定根节点出发最长路径的值。这里用了广搜。

二. 每个节点只有两条邻接边,每个节点用一个vector来存储这些边。还有isVisited数组保证一条路径中一个节点只能经过一次。

三.

 1 //

 2 //  main.cpp

 3 //  sicily-1024

 4 //

 5 //  Created by ashley on 14-10-13.

 6 //  Copyright (c) 2014年 ashley. All rights reserved.

 7 //

 8 

 9 #include <iostream>

10 #include <vector>

11 using namespace std;

12 typedef struct

13 {

14     int left;

15     int right;

16     int weight;

17 }edge;

18 vector<edge> route;

19 vector<edge> adj[10001];

20 bool isVisited[10001];

21 void breadthSearch(int source, int &length, int pathLength)

22 {

23     isVisited[source] = true;

24     for (int i = 0; i < (int)adj[source].size(); i++) {

25         if (isVisited[adj[source][i].right] == false || isVisited[adj[source][i].left] == false) {

26             if (pathLength + adj[source][i].weight > length) {

27                 length = pathLength + adj[source][i].weight;

28             }

29             if (isVisited[adj[source][i].right] == false) {

30                 breadthSearch(adj[source][i].right, length, pathLength + adj[source][i].weight);

31             }

32             if (isVisited[adj[source][i].left] == false) {

33                 breadthSearch(adj[source][i].left, length, pathLength + adj[source][i].weight);

34             }

35         }

36     }

37 }

38 int main(int argc, const char * argv[])

39 {

40     int nodeNum, capital;

41     while (cin >> nodeNum >> capital) {

42         for (int i = 0; i < 10001; i++) {

43             adj[i].clear();

44             isVisited[i] = false;

45         }

46         //memset(adj, 0, sizeof(adj));

47         //memset(isVisited, 0, sizeof(isVisited));

48         int l, r, w;

49         for (int i = 0; i < nodeNum - 1; i++) {

50             cin >> l >> r >> w;

51             adj[l].push_back(edge{l, r, w});

52             adj[r].push_back(edge{l, r, w});

53         }

54         int longest = 0;

55         breadthSearch(capital, longest, 0);

56         cout << longest << endl;

57     }

58     return 0;

59 }

 

源代码

你可能感兴趣的:(CI)