题意:求最长路径,边不可重复,点可以。
解决思路:回溯暴力搜索
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=26;
int n,m,ans;
int map[N][N],vis[N][N];
//回溯暴力搜索
void search(int cur,int len)
{
ans=max(ans,len);
for(int i=0;i<n;i++)
{
if(map[cur][i]==0||vis[cur][i]==1) continue;
vis[cur][i]=vis[i][cur]=1;
search(i,len+1);
vis[cur][i]=vis[i][cur]=0;
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
int a,b;
memset(map,0,sizeof(map));
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=1;
}
ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
search(i,0);
}
printf("%d\n",ans);
}
return 0;
}