最近陪XY在练习代码,随便做的一些裸题。
题目链接:http://poj.org/problem?id=2387
题意:给出一个N个点T条边的无向图,求N到1的最短路。
思路:其实直接用最短路算法也可以,但是因为练习DFS,而且N比较小,就写了DFS。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e3 + 10;
const int INF = 0x3f3f3f3f;
int dis[N][N];
int d[N];
int t, n;
int len;
void dfs(int node, int sum) {
if (node == 1) {
len = min(sum, len);
return ;
}
for (int i = 1; i <= n; i++) {
if (d[i] > sum + dis[node][i]) {
d[i] = sum + dis[node][i];
dfs(i, sum + dis[node][i]);
}
}
}
int main() {
while (scanf("%d%d", &t, &n) != EOF) {
memset(dis, INF, sizeof(dis));
memset(d, INF, sizeof(d));
len = INF;
for (int i = 0; i < t; i++) {
int x, y, v;
scanf("%d%d%d", &x, &y, &v);
dis[x][y] = min(dis[x][y], v);
dis[y][x] = min(dis[x][y], v);
}
dfs(n, 0);
printf("%d\n", len);
}
return 0;
}