poj --1321

//dfs,按行开始标记列 
//注意回溯思想
#include
#include
using namespace std;

int visited[10],cnt,n,k;
char map[10][10];
void dfs(int i,int num)
{
    for(int j=0;j>n>>k&&n!=-1)
    {
         for(i=0;i>map[i];
         memset(visited,0,sizeof(visited));
         cnt=0;
         for(i=0;i<=n-k;i++) //按行开始深搜
         {
             dfs(i,k);  //因为一行只能摆一个又必须摆k个所以必需有k行 
         }              // 由此可得一个剪枝策略:开始行i的上限最大为n-k
                        //(再大就不能保证可以搜索的行有k行了) 
         cout<

你可能感兴趣的:(搜索)