题意:有n个点m条边,求该图的最长一条链。
思路:很简单的图的搜索,以每个点为起点都搜一遍过,找出最长的。
//0 KB 18 ms
#include
#include
#define M 30
struct Edge
{
int u,v,nxt;
}edge[M*2];
int head[M],vis[M*2];
int n,m,ep,ans;
void addedge(int cu,int cv)
{
edge[ep].v = cv;
edge[ep].nxt = head[cu];
head[cu] = ep++;
edge[ep].v = cu;
edge[ep].nxt = head[cv];
head[cv] = ep++;
}
void DFS(int u,int dep)
{
for (int i = head[u];i != -1;i = edge[i].nxt)
{
if (!vis[i])
{
ans = ans > (dep+1)? ans:(dep+1);
vis[i] = vis[i^1] = 1; //是无向图,反向边也得标志
DFS(edge[i].v,dep+1);
vis[i] = vis[i^1] = 0;
}
}
}
int main ()
{
int i,j,u,v;
while (~scanf ("%d %d",&n,&m))
{
if (n == 0&&m == 0)
break;
memset (head,-1,sizeof(head));
ep = 0;
for (i = 0;i < m;i ++)
{
scanf("%d %d",&u,&v);
addedge(u,v);
//addedge(v,u);
}
ans = 0;
for(i = 0;i < n;i ++)
{
memset (vis,0,sizeof(vis));
DFS(i,0);
}
printf ("%d\n",ans);
}
return 0;
}