poj1321(簡單的dfs)

(最近在做kuangbin帶你飛專題)問題鏈接:棋盤問題
這是一道入門dfs的題目,以為n的比較小,所以完全可以用dfs的方法通過這一道題。
我們先討論一下這一道題目的思路,要求棋子的橫豎均只能有一個棋子,我們可以對行進(jìn)行dfs,用一個記錄數(shù)組表示列是否已經(jīng)含有棋子,既1表示有,0表示沒有。dfs的過程中,填充棋子的數(shù)量等于k時,此dfs結(jié)束cnt++返回上一層,若遍歷的行號等于n既已出范圍直接結(jié)束此層dfs。若本行可填,注意回溯。
另外要注意k的大小會比n要小,dfs的情況需要注意。
ac代碼如下:

#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int k, n, cnt;
char s[10][10];
int col[10];
void dfs(int x, int num)
{
    if(num==k)
    {
        cnt++;
        return;
    }
    if(x==n)return;
    for(int i=0; i<n; i++)
        {
        if(s[x][i]=='#'&&!col[i])
        {
            col[i]=1;
            dfs(x+1, num+1);
            col[i]=0;
        }
    }
    if(x<n)
    dfs(x+1, num);
}

int main(void)
{
    while(scanf("%d%d", &n, &k))
    {
        cnt=0;
        memset(col, 0, sizeof(col));
        if(k==-1&&n==-1)
        break;
        for(int i=0; i<n; i++)
        scanf("%s", s[i]);
        dfs(0, 0);
        printf("%d\n", cnt);
    }
    return 0;
}

over

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容