問題:
http://acm.pku.edu.cn/JudgeOnline/problem?id=3411思路:
做過幾道類似的題,DFS
不過,這一道有點特殊,每條邊以及每個點的訪問次數并非只有一次,為了能夠預付款,需要重復訪問某個點或者邊
這樣出現的一個問題就是搜索何時結束?這里參考了網上的代碼: 重復訪問的原因是為了能夠預先到達某個城市,而城市的總個數為N,也就是說,每個點的重復訪問次數不需要超過N
另外,由于每兩個點之間可能存在多條路徑,因此不能使用鄰接矩陣,而需要鄰接表
代碼
1 int N, m;
2 int min;
3 int mark[MAX_LEN];
4 struct Node {
5 int dest;
6 int adv;
7 int p, r;
8 struct Node *next;
9 };
10 struct Node *roads[MAX_LEN];
11 struct Node save[MAX_LEN];
12
13 void
14 init()
15 {
16 int i, a, b, c, p, r, cnt = 0;
17 min = INF;
18 memset(mark, 0, sizeof(mark));
19 memset(roads, 0, sizeof(roads));
20 for(i=0; i<m; i++) {
21 scanf("%d %d %d %d %d", &a, &b, &c, &p, &r);
22 save[cnt].dest = b;
23 save[cnt].adv = c;
24 save[cnt].p = p;
25 save[cnt].r = r;
26 save[cnt].next = roads[a];
27 roads[a] = save+cnt;
28 ++cnt;
29 }
30 }