POJ1321-棋盤問題

題目鏈接:點擊打開鏈接

中文題,題意就不說了,逐行搜索,記錄步數,標記列,注意考慮不放棋子的情況。

//164K	47MS
//C++	589B
#include <cstdio>
#include <cstring>
int n,m,sum;
char map[8][8];
int vis[8];
void dfs(int i,int k)
{
    if(k==m)
    {
        sum++;
        return;                //擺放完畢退出
    }
    if(i>=n) return;           //越界退出
    for(int j=0;j<n;j++)
    {
        if(map[i][j]=='#'&&!vis[j])
        {
            vis[j]=1;
            dfs(i+1,k+1);       //本行在j處放棋子搜索下一行
            vis[j]=0;           //這個很容易忘啊。。。
        }
    }
    dfs(i+1,k);                 //本行不放棋子
}
int main()
{
    int i;
    while(~scanf("%d%d",&n,&m)&&(n!=-1&&m!=-1))
    {
        sum=0;
        memset(vis,0,sizeof(vis));
        for(i=0;i<n;i++)
        {
            scanf("%s",map[i]);
        }
        dfs(0,0);
        printf("%d\n",sum);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章