UVA 539 The Settlers of Catan
题意 输入n, 再输入n组数据,每组数据有两个节点,表示两点可以相连,每两个可以相连的节点长度为1,找出该图中最长的路径输出值, 注意:节点可以重复经过, 边不能重复
思路 直接dfs,每个节点都进行一次dfs,找出每个借点连接的最大路径,然后进行比较输出最大的那个
代码
#include <stdio.h>
#include <string.h>
int lu[30][30];
int num[30];
int vis[30][30];
int max;
int maxx;
void dfs(int n, int d)
{
for (int i = 0; i < num[n]; i ++)
{
if (vis[n][lu[n][i]] == 0)
{
if (max < d + 1)
max = d + 1;
vis[n][lu[n][i]] = vis[lu[n][i]][n] = 1;
dfs(lu[n][i], d + 1);
vis[n][lu[n][i]] = vis[lu[n][i]][n] = 0;
}
}
}
int main()
{
int n, m;
while (scanf("%d%d", &n, &m) != EOF && n && m)
{
maxx = 0;
memset(lu, 0, sizeof(lu));
memset(num, 0, sizeof(num));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < m; i ++)
{
int a, b;
scanf("%d%d", &a, &b);
lu[a][num[a]++] = b;
lu[b][num[b]++] = a;
}
for (int i = 0; i < n; i ++)
{
max = 0;
dfs(i,0);
if (max > maxx)
maxx = max;
}
printf("%d\n", maxx);
}
return 0;
}