POJ 1321 棋盘问题 ; ( 1 )

来源:互联网 发布:尔玛网络 编辑:程序博客网 时间:2024/05/17 07:45
#include<stdio.h>int book[10];char c[10][10];int sum , step;int n , k ;void dfs (int s)//s表示行 因为每行每列都不可以有元素 所以一行为单位{    int p;    if(step== k) {        sum ++;        return;    }    else{    if(s>= n) return;    else{    for(p= 0 ; p< n ; p++){        if(c[s][p]== '#'&& !book[p]){            book[p] =1;            step ++;            dfs(s+1);            book[p] =0;            step --;        }    }    }     dfs(s+1);    } }int main(){    int i ;    while(scanf("%d %d",&n,&k)!= EOF)    {           if(n== -1&& k == -1)break;        getchar();                for(i= 0 ;i< 10 ; i++)        book [i] =0;                //reset        step =0 ; sum = 0 ;        for(i= 0 ; i< n ; i++ )        scanf("%s",c[i]);                        //input                dfs(0);        printf("%d\n",sum);    }}


以行为单位的DFS ,  使用一层循环逐行遍历 , DFS ,

原创粉丝点击