题意:给出结点和边,输出最长边长度。
回溯即可。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 25;
int n, m;
int e[MAX_N][MAX_N];
int vis[MAX_N][MAX_N];
int res;
void find(int u, int cur)
{
res = max(res, cur);
for(int v = 0; v < n; v++)
{
if(e[u][v] && !vis[u][v])
{
vis[u][v] = vis[v][u] = 1;
find(v, cur+1);
vis[u][v] = vis[v][u] = 0;
}
}
}
void solve()
{
res = 0;
for(int u = 0; u < n; u++)
{
find(u, 0);
}
printf("%d\n", res);
}
int main()
{
while(scanf("%d%d", &n, &m), n+m)
{
memset(e, 0, sizeof(e));
memset(vis, 0, sizeof(vis));
for(int i = 0; i < m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
e[u][v] = e[v][u] = 1;
}
solve();
}
return 0;
}