传送门UVa 539 & POJ 2258 - The Settlers of Catan
题意是统计图中最长路,可以有断点。
比较基础的回溯题,不过第一次写的时候我把vis只开了一维,这样的话往前走就回不来了,WA。
还是没有对前面的内容理解好啊,还要多做题。。
BTW,UVa太靠不住了,已经挂了两天了(╯‵□′)╯ ┴─┴
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int vis[30][30], G[30][30], longest, n;
void DFS(int curLong, int cur);
int main()
{
//freopen("input.txt", "r", stdin);
int m, i, j, a, b;
while (scanf("%d%d", &n, &m), m + n)
{
longest = 0;
memset(vis, 0, sizeof(vis));
memset(G, 0, sizeof(G));
for (i = 0; i < m; i++)
{
scanf("%d%d", &a, &b);
G[a][b] = G[b][a] = 1;
}
for (i = 0; i < n; i++) //因为可能有断点,所以要遍历每个点。
DFS(0, i);
printf("%d\n", longest);
}
return 0;
}
void DFS(int curLong, int cur)
{
longest = max(curLong, longest);
for (int i = 0; i < n; i++)
if (!vis[cur][i] && G[cur][i])
{
vis[cur][i] = vis[i][cur] = 1;
DFS(curLong + 1, i);
vis[cur][i] = vis[i][cur] = 0;
}
}