八皇后问题v1

来源:互联网 发布:apache hadoop是什么 编辑:程序博客网 时间:2024/05/10 08:52

#include<stdio.h>

/* 八皇后问题 */

 

/* 该算法是个比较挫的的方法,而且很难看懂 */


int a[8+1= { 1,1,1,1,1,1,1,1,1 }; //表明i行是否可以放皇后: 1可以放,0不可以放 
int c[17= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; // 主对角线可以放皇后否 
int d[17= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; // 次对角线可以放皇后否 
int m_t[8+1= { 0,0,0,0,0,0,0,0,0 };  // m[j]=i , j列i行有皇后


/*
 * NOTE: i 表示从第几行开始放, n 表示几个格 
 
*/ 
void Trail( int i , int n , int
 m_t[])
{
    
int
 j;
    
    
int
 index;
    
int m[9
];
    
for(index = 0 ; index <=8 ; index++
 )
        m[index] 
=
 m_t[index];
    
    
if( i>
n )
    {
        
for(j=1 ; j<=n ; j++
 )
            printf(
"(%d,%d) "
,m[j],j);
        printf(
"/n"
);
    }
    
else

    {
        
for (j=1; j<=8++j)
        {
            
if( m[j] != 0
 )
                
continue
;
            m[j] 
= i; //
 在第i行,第j列放置一个棋子 
            
            
            
// 如果当前布局合法的话 

            if ( a[ m[j] ] && c[i+j] && d[i-j+n] )
            {
                a[ m[j] ] 
= c[i+j] = d[i-j+n] =0
;
                Trail( i
+1
, n , m);
                a[ m[j] ] 
= c[i+j] = d[i-j+n] =1
;
            }
            m[j] 
= 0
;    
        }
    }
}


int main(void
)
{
    
    Trail(
1,8
,m_t);
    
return 0
;
}

原创粉丝点击