#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 50
int vis[N][N], map[N][N];
int n, m, a, b, lenmax;
void dfs(int x, int y)
{
if(y > lenmax)
lenmax = y;
for(int i = 0;i < n; i++)
{
if(!vis[x][i] && !vis[i][x] && map[x][i])//vis[x][i]和vis[i][x]为0,是防止重复遍历已经遍历过的路
{
vis[x][i] = 1;
dfs(i, y + 1);
vis[x][i] = 0;
}
}
}//回溯法,深度搜索
int main(){
while(scanf("%d%d", &n, &m) == 2 && n && m)
{
lenmax = 0;
memset(map, 0, sizeof(map));
for(int i = 0;i < m; i++)
{
scanf("%d%d", &a, &b);
map[a][b] = 1;
map[b][a] = 1;//将两个有路的点连接起来
}
for(int j = 0;j < n; j++)
{
memset(vis, 0, sizeof(vis));
dfs(j, 0);
}
printf("%d\n", lenmax);
}
return 0;
}
UVA569
最新推荐文章于 2014-09-25 10:11:17 发布