今晚取快递的题目
#include <iostream>
#include <limits.h>
#include <vector>
using namespace std;
int n, m, s, t, min = INT_MAX, b[100000], e[100000], len[100000];
void route(bool history[10000], int length, int s, int t) {
if (s == t) { //如果已经来到了终点,就更新一下最短路径长
if (length < min) min = length;
return;
}
for (int i = 0; i < n; i++) {
if (b[i] == s && !history[e[i]]) { //起点为b[i],并且终点e[i]没有遍历过,那就遍历一下
history[e[i]] = true; //将e[i]遍历过的信息带到下一层去
route(history, length + len[i], e[i], t); //顺便带上这次遍历的路径长度
}
}
}
int main() {
cin >> n >> m >> s >> t;
for (int i = 0; i < m; i++) {
cin >> b[i] >> e[i] >> len[i];
}
bool history[10000] = { false };
int sum = 0;
route(history, 0, s, t); sum += min; min = INT_MAX; //min初始化,再计算一次回来的
route(history, 0, t, s); sum += min;
cout << sum << endl;
}
#笔试题目#