递归深搜——poj 1321,类八皇后

递归深搜——poj 1321,类八皇后

#include < cstdio >
#include
< cstdlib >
#include
< cmath >
#include
< string >

int  k,n,ct,num_p,col[ 10 ],ans[ 92 ][ 10 ],row[ 10 ]; // col记录第i行放棋子所在的列号

char  bd[ 10 ][ 10 ]; // 棋盘布局

void  queen( int  i)
{
    
int j,t;

    
if(num_p==k)//不同于八皇后,k不一定为8,有题目给出
    {
        
/**//*for(j=0;j<n;++j)记录可能方案情况,此题不要求
            ans[ct][j]=col[j]+1;
*/

        ct
++;
        
return ;
    }


    
if(i==n)return ;//少了此条件则n无限大
    for(j=0;j<n;++j)
    
{
            
if(bd[i][j]=='.')continue;
            
for(t=0;t<i;++t)
                
if(col[t]==j)break;
        
if(t==i)
        
{
            col[i]
=j;
            num_p
++;
            queen(i
+1);
            num_p
--;
            col[i]
=9;
        }

    }

    
if(k<n)//不同于八皇后,第i行可以不放棋子,故深搜多一条支路
    {
        
//num_p++;
        queen(i+1);
        
//num_p--;
    }

}

int  main()
{
    
int i,j;
    
while(scanf("%d%d",&n,&k)==2&&n!=-1&&k!=-1)
    
{
        
for(i=0;i<n;++i)
        
{
            scanf(
"%s",bd[i]);
        }


        queen(
0);
        printf(
"%d\n",ct);
        ct
=0;
        memset(col,
0,sizeof(col));
        memset(row,
0,sizeof(row));
    }

    
return 0;
}

你可能感兴趣的:(递归深搜——poj 1321,类八皇后)