Keyword: graph, brute force
Algorithm:
Note that there may be an algorithm with higher efficiency.
I used brute force method to generate all possible drawings (in permutation) and check the validity.
A solution is said to be ok if all vertexes are drawn only once.
If the solution is correct, then print it out.
Code:
#include<cstdio>
#include<algorithm>
using namespace std;
int all[] = { 12, 13, 15, 23, 25, 34, 35, 45 };
bool ok( char *s )
{
int use[ 9 ] = { 0 };
for( int i = 0; i < 8; ++i )
++use[ find( all, all+8, max( s[i], s[i+1] ) + min( s[i], s[i+1] ) * 10 - 528 ) - all ];
for( int i = 0; i < 8; ++i )
if( use[ i ] != 1 )
return false;
return true;
}
int main()
{
char order[] = { "112334552" };
do
if( ok( order ) )
printf( "%s\n", order );
while( next_permutation( order+1, order+8 ) );
return 0;
}
沒有留言:
張貼留言