题意:在图上找出最长的路,简单的回溯
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 30 ;
int n,m,G[MAXN][MAXN],vis[MAXN][MAXN],maxNum;
void dfs(int u,int num)
{
for (int v = 0 ; v < n ; v++)
{
if (G[u][v] && !vis[u][v])
{
vis[u][v] = vis[v][u] = 1;
dfs(v,num+1);
vis[u][v] = vis[v][u] = 0;
}
}
if (num > maxNum)
maxNum = num;
}
int main()
{
int i,j,a,b;
while (scanf("%d%d",&n,&m) != EOF )
{
if (!n && !m)
break;
memset(G,0,sizeof(G));
for (i = 0 ; i < m ; i++)
{
scanf("%d%d",&a,&b);
G[a][b]++,G[b][a]++;
}
maxNum = -123456789;
for (i = 0 ; i < n ; i++)
{
memset(vis,0,sizeof(vis));
dfs(i,0);
}
printf("%d\n",maxNum);
}
return 0;
}