题意:求无向图的最长链,点可以重复,边不可以重复
思路:暴力解决
每个点都有可能变成起始点,所以用每个点都暴力找到每个点的所有能走的路,用visit[i][j]保存走过的边,如果边没走过,就走,否则就不走
邻接矩阵简历表,发现有边可以走,就走过去从该点开始往下遍历
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int map[26][26] = {0};
bool visit[26][26] = {0};
int Max = -999;
void dfs(int u,int n,int cnt)
{
if(cnt > Max) Max = cnt;
for(int i = 0; i < n;i++)
{
if(map[u][i] && !visit[u][i])
{
visit[u][i] = visit[i][u] = true;
dfs(i,n,cnt+1);
visit[u][i] = visit[i][u] = false;
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
int x,y;
if(n == 0 && m == 0) break;
memset(map,false,sizeof(map));
for(int i = 0; i < m; i++)
{
scanf("%d%d",&x,&y);
map[x][y] = map[y][x] = true;
}
Max = -999;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(map[i][j])
{
visit[i][j] = visit[j][i] = true;
dfs(j,n,1);
visit[i][j] = visit[j][i] = false;
}
}
}
printf("%d\n",Max);
}
return 0;
}