poj1321(dfs)

1.この質問は、一般的な詳細検索の質問とは少し異なります。これは行ごとの検索なので、各列が条件を満たすかどうかを判断するだけです。
2.よくある検索の質問に従って検索すると、検索が繰り返されますが、これはより困難です。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
char map_[10][10];
int vis[10];
int ans;
int n,k;
int dfs(int f,int row)
{
    
    
    if(f==k)
    {
    
    
        ans++;
        return 0;
    }
    for(int i=row;i<n;i++)
    {
    
    
        for(int j=0;j<n;j++)
        {
    
    
            if(map_[i][j]=='#'&&!vis[j])
            {
    
    

                vis[j]=1;
                //f++;
                dfs(f+1,i+1);
                //f--;
                vis[j]=0;
            }
        }
    }
    return 0;
}
int main()
{
    
    

    while(cin>>n>>k)
    {
    
    
        ans=0;
        if(n==-1&&k==-1)
        {
    
    
            break;
        }
        for(int i=0;i<n;i++)
        {
    
    
            scanf("%s",map_[i]);
        }
        dfs(0,0);
        cout<<ans<<endl;
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/mingjiweixiao/article/details/114004070