/***
* 用dfs并且用了剪枝,为什么还是WA
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 110;
int g[N][N];
bool vis[N];
int n;
int step, dest;
int length[N];
void dfs(int s, int dep);
int main() {
int s;
int p, q;
int t = 1;
#if 0
#ifndef ONLINE_JUDGE
freopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endif
#endif
while (scanf("%d", &n) == 1) {
if (n == 0)
break;
scanf("%d", &s);
memset(g, 0x00, sizeof(g));
while (scanf("%d%d", &p, &q) == 2) {
if (p == 0 && q == 0)
break;
g[p][q] = 1;
}
memset(vis, false, sizeof(vis));
memset(length, 0, sizeof(length));
step = -1;
dest = s;
vis[s] = true;
dfs(s, 0);
#if 0
int m = 0;
int index = 0;
for (int i = 1; i <= n; i++) {
if (length[i] > m) {
m = length[i];
index = i;
}
}
#endif
printf("Case %d: The longest path from %d has length %d, finishing at %d.\n\n",
t++, s, step, dest);
}
return 0;
}
void dfs(int s, int dep) {
for (int i = 1; i <= n; i++) {
if (g[s][i] && !vis[i]) {
vis[i] = true;
if (dep + 1 > length[i]) {
length[i] = dep + 1;
dfs(i, dep + 1);
}
vis[i] = false;
}
}
if (dep > step) {
step = dep;
dest = s;
}
}
UVa10000 - Longest Paths(为什么是WA)
最新推荐文章于 2016-06-04 15:23:14 发布