你的程序能运行出合理的结果吗?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;
}