代码如下, 只过了 #4 #5 #7 #9
# include <bits/stdc++.h>
using namespace std ;
int a [514] ;
int g [514] [514] ;
int main ( )
{
int m , n ;
cin >> m >> n ;
memset ( g , 0x3f3f3f3f , sizeof ( g ) ) ;
for ( int i = 1 ; i <= n ; i ++ )
{
g [i] [i] = 1 ;
}
for ( int i = 0 ; i <= m ; i ++ )
{
int as = 1 , x = 0 ;
string s ;
getline ( cin , s ) ;
int a1 = 0 ;
for ( int i = 0 ; i < s . size ( ) ; i ++ )
{
if ( s [i] == ' ' )
{
a [++ x] = a1 ;
a1 = 0 ;
}
else
{
a1 = a1 * 10 + int ( s [i] - '0' ) ;
}
}
a [++ x] = a1 ;
for ( int j = 1 ; j < x ; j ++ )
{
for ( int k = j + 1 ; k <= x ; k ++ )
{
g [a [j]] [a [k]] = 1 ;
}
}
}
for ( int i = 1 ; i <= n ; i ++ )
{
for ( int j = 1 ; j <= n ; j ++ )
{
for ( int k = 1 ; k <= n ; k ++ )
{
g [j] [k] = min ( g [j] [k] , g [j] [i] + g [i] [k] ) ;
}
}
}
if ( g [1] [n] >= 10000 )
{
cout << "NO" << endl ;
}
else
{
cout << g [1] [n] - 1 << endl ;
}
return 0 ;
}