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