你的程序能运行出合理的结果吗?void queue(int n)中的m就没赋初值。
有 m 这一行改为:
int i,k,m=0;
即可。
试运行结果:
(输入)8
92
程序代码:#include<stdio.h>
#include<math.h>
#include <stdbool.h>
bool place_ok( int *px, int k )
{
int i;
for ( i = 1; i < k; i++ ) {
if ( px[k] == px[i] || abs( k - i ) == abs( px[k] - px[i] ) )
return false;
}
return true;
}
void queen( int n )
{
int x[n + 1];
int i, k = 1, m = 0;
for ( i = 1; i <= n; i++ )
x[i] = 0;
while ( k >= 1 ) {
x[k]++;
while ( x[k] <= n && !place_ok( x, k ) )
x[k]++;
if ( x[k] > n ) {
x[k] = 0;
k--;
} else if ( k == n ) {
m++;
} else {
k++;
}
}
if ( n == 1 )
printf( "1\n" );
else
printf( "%d\n", m );
}
int main(void)
{
int n;
printf( "Input n:" );
scanf( "%d", &n );
queen( n );
return 0;
}
程序代码:#include<stdio.h>
#include<math.h>
#include <stdbool.h>
bool place_ok( int *px, int k )
{
int i;
for ( i = 1; i < k; i++ ) {
if ( px[k] == px[i] || abs( k - i ) == abs( px[k] - px[i] ) )
return false;
}
return true;
}
int queen( int n )
{
int x[n + 1];
int i, k = 1, m = 0;
for ( i = 1; i <= n; i++ )
x[i] = 0;
while ( k >= 1 ) {
x[k]++;
while ( x[k] <= n && !place_ok( x, k ) )
x[k]++;
if ( x[k] > n ) {
x[k] = 0;
k--;
} else if ( k == n ) {
m++;
} else {
k++;
}
}
return n == 1 ? 1 : m;
}
int main(void)
{
int n;
printf( "Input n:" );
scanf( "%d", &n );
printf( "Methods: %d\n", queen( n ) );
return 0;
}