问题:
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 }