搜索即可,图为无向图。找出能走的不重复的边的最大数
#include <iostream>
#include<cstring>
#include<algorithm>
#include<fstream>
#define maxn 30
using namespace std;
int map[maxn][maxn];
int vis[maxn][maxn];
int point_num;
int edge_num;
int max_num;
void dfs(int n,int num)
{
if(num>max_num) max_num=num;
for(int i=0;i<point_num;i++)
{
if(i!=n&&!vis[n][i]&&map[n][i])
{
vis[n][i]=1;
vis[i][n]=1;
dfs(i,num+1);
vis[n][i]=0;
vis[i][n]=0;
}
}
}
int main()
{
while(cin>>point_num>>edge_num)
{
if(0==point_num&&0==edge_num) break;
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
max_num=0;
for(int i=0;i<edge_num;i++)
{
int a,b;
cin>>a>>b;
map[a][b]=1;
map[b][a]=1;
}
for(int i=0;i<point_num;i++)
{
dfs(i,0);
}
cout<<max_num<<endl;
}
return 0;
}