1003用的深度优先算法......最开始一直报错不知道为啥?
推荐这个:http://zjuerlemon.iteye.com/blog/2239454
还有一种方法,不过没用过https://www.cnblogs.com/nigang/p/3658990.html
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
class node {
public:
int y, l;
node(int i2, int i3) :y(i2), l(i3) {}
};
map<int, node> b[501];
int mt, len, nlen;
void tryd(int st, const int end,int length, int maxt, int *fi, int *a) {
if (st == end) {
if (length < len) {
len = length;
nlen = 1;
mt = maxt;
}
else if (len == length) {
++nlen;
if (mt < maxt)
mt = maxt;
}
return;
}
map<int, node>::iterator li;
fi[st] = 0;
for (li = b[st].begin(); li != b[st].end(); ++li) {
if (fi[li->second.y]) {
if (length > len)
continue;
tryd(li->second.y, end, length + li->second.l, maxt + a[li->second.y], fi, a);
}
}
fi[st] = 1;
}
int main() {
mt = 0, len = (1<<31)-1, nlen = 0;//全局变量一定要在main里面赋值
int n, m, c1, c2;
cin >> n >> m >> c1 >> c2;
int *a = new int[n];
int *fi = new int[n];
for (int i = 0; i < n; ++i) {
cin >> a[i];
fi[i] = 1;
}
for (int i = 0; i < 501; ++i) {
b[i].clear();
}
int i1, i2, i3;
for (int i = 0; i < m; ++i) {
cin >> i1 >> i2 >> i3;
node d1(i2, i3), d2(i1, i3);
b[i1].insert(make_pair(i2, d1));
b[i2].insert(make_pair(i1, d2));
}
tryd(c1, c2, 0, a[c1], fi, a);
cout <<nlen << " " << mt ;
}