POJ2258
题意:
给定一些点,一些边。
找出最长的一条路。
点可重复走。
简单的dfs
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 105; 4 int mat[ maxn ][ maxn ],vis[ maxn ][ maxn ]; 5 int max( int i,int j ){ 6 if( i<j ) i=j; 7 return i; 8 } 9 int ans; 10 11 void dfs( int pos,int sum,int n ){ 12 if( pos>=n ) return ; 13 ans=max( ans,sum ); 14 for( int i=0;i<n;i++ ){ 15 if( i==pos ) continue; 16 if( vis[ pos ][ i ]==0 ) continue; 17 vis[ pos ][ i ]=vis[ i ][ pos ]=0; 18 dfs( i,sum+1,n ); 19 vis[ pos ][ i ]=vis[ i ][ pos ]=1; 20 } 21 } 22 23 24 25 26 int main(){ 27 int n,m; 28 while( scanf("%d%d",&n,&m)==2 ,n+m ){ 29 memset( mat,0,sizeof( mat ) ); 30 while( m-- ){ 31 int a,b; 32 scanf("%d%d",&a,&b); 33 mat[ a ][ b ]=mat[ b ][ a ]=1; 34 //vis[ a ][ b ]=vis[ b ][ a ]=1; 35 } 36 ans=0; 37 for( int i=0;i<n;i++ ){ 38 for( int j=0;j<n;j++ ) 39 for( int k=0;k<n;k++ ) 40 vis[ j ][ k ]=mat[ j ][ k ]; 41 dfs( i,0,n ); 42 } 43 printf("%d\n",ans); 44 } 45 return 0; 46 }
keep moving...