POJ 1321

本文介绍了一个使用C++实现的棋盘问题求解算法,通过深度优先搜索(DFS)策略,在给定的棋盘上寻找放置指定数量棋子的方案数。代码中运用了多种标准库,如算法、队列、栈等,并详细展示了如何通过递归函数进行状态空间的遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照一行一行来枚举

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <stack>
 7 #include <vector>
 8 #include <iomanip>
 9 using namespace std;
10 char a[15][15];
11 int n,k;
12 int h[15],sum=0;
13 void dfs(int x,int y)
14 {
15     if(y==k)
16     {
17         sum++;
18         return;
19     } 
20     if(x>=n)
21     return;
22     for(int i=0;i<n;i++)
23     {
24         if(a[x][i]=='#'&&h[i]==0)
25         {
26             h[i]=1;
27             dfs(x+1,y+1);
28             h[i]=0;
29         }
30     }
31     dfs(x+1,y);
32     return;
33 }
34 int main(int argc, char *argv[])
35 {
36     while(scanf("%d%d",&n,&k)!=EOF)
37     {
38         if(n==-1&&k==-1)
39         break;
40         for(int i=0;i<n;i++)
41         {
42             getchar();
43             scanf("%s",a[i]);
44         }    
45         memset(h,0,sizeof(h));
46         sum=0;
47         dfs(0,0);
48         printf("%d\n",sum);
49         
50     }
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/huluxin/p/9813732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值