/* Author: ACb0y Date: 2010-9-16 Type: Shortest path (Dijkstra) ProblemId: TJU 2870 Result: AC */ #include <iostream> using namespace std; #define inf 999999999 int n, q; int g[210][210]; int d[210]; int vis[210]; void Dijkstra(int k) { int i, j; for (i = 0; i < n; i++) { d[i] = inf; } d[0] = 0; memset(vis, 0, sizeof(vis)); int cnt = -1; int ans; for (i = 0; i < n; i++) { int Min = inf; int pos = -1; for (j = 0; j < n; j++) if (!vis[j]) { if (d[j] < Min || (d[j] == Min && j < pos)) { Min = d[j]; pos = j; } } cnt++; if (cnt == k) { ans = pos; break; } vis[pos] = 1; for (j = 0; j < n; j++) { if (g[pos][j] + d[pos] < d[j]) { d[j] = g[pos][j] + d[pos]; } } } cout << ans << endl; } int main() { int i, j; #ifndef ONLINE_JUDGE freopen("2870.txt", "r", stdin); #endif while (cin >> n) { if (n == 0) break; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { g[i][j] = inf; } } scanf("%d", &q); for (i = 1; i <= q; i++) { int a, b, c; cin >> a >> b >> c; if (g[a][b] > c) { g[a][b] = g[b][a] = c; } } int k; scanf("%d", &k); Dijkstra(k); } return 0; }