POJ 1321 棋盘问题 DFS搜索

简单搜索 练习一下回溯

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <sstream>
 5 #include <string>
 6 #include <algorithm>
 7 #include <list>
 8 #include <map>
 9 #include <vector>
10 #include <queue>
11 #include <stack>
12 #include <cmath>
13 #include <cstdlib>
14 using namespace std;
15 int n,k;
16 int ans;
17 char s[10][10];
18 int usex[10],usey[10];
19 bool ok(int x,int y){
20     if(x<0||x>=n||y<0||y>=n)
21         return 0;
22     if(s[x][y]=='.'){
23         return 0;
24     }
25     if(usex[x]==1||usey[y]==1)
26         return 0;
27     return 1;
28 }
29 void dfs(int x,int y){
30     if(y==k){
31         ans++;
32         return ;
33     }
34     if(x>n){
35         return ;
36     }
37     for(int i=0;i<n;i++){
38         if(ok(x,i)){
39             usey[i]=1;
40             usex[x]=1;
41             dfs(x+1,y+1);
42             usey[i]=0;
43             usex[x]=0;
44         }
45     }
46     dfs(x+1,y);
47 }
48 int main(){
49     while(~scanf("%d%d",&n,&k),n!=-1||k!=-1){
50         ans=0;
51         memset(usey,0,sizeof(usey));
52         memset(usex,0,sizeof(usex));
53         for(int i=0;i<n;i++){
54             scanf("%s",s[i]);
55         }
56         dfs(0,0);
57         printf("%d\n",ans);
58     }
59     return 0;
60 }
View Code

 

转载于:https://www.cnblogs.com/ITUPC/p/5361292.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值