POJ 1321 棋盘问题(dfs)

本文介绍了一种使用深度优先搜索算法解决在给定形状的棋盘上摆放棋子的问题,确保任意两个棋子不在同一行或同一列。通过预处理确定摆放规则,并采用递归搜索所有可行的摆放方案。

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

Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample Input
2 1
#.
.#
4 4
…#
..#.
.#..
#…
-1 -1
Sample Output
2
1
Solution
dfs
由于只要放k个棋子,且有些行不能放棋子。所以可以先预处理一下,看哪些行需要放棋子。处理当前行的时候有两种状态,一是在当前航放棋子,二是不放棋子。放棋子就判断是否有相同列,不放棋子则直接深搜下一行
Code

#include<cstdio>
#include<iostream>
using namespace std;
#define maxn 10
char map[maxn];
int f[maxn][maxn];
int v[maxn];//列标记 
int n,k;
int ans;//状态计数器  
void dfs(int x,int s)//逐行搜索,x为当前搜索行,s为已填充的棋子数 
{
    if(s==k)
    {
        ans++;
        return ;
    }
    int j;
    if(x>n)//配合下面DFS(x+1,num)使用,避免搜索越界
        return ;
    for(j=1;j<=n;j++)
        if(f[x][j]&&v[j])
        {
            v[j]=0;//放置棋子的列标记
            dfs(x+1,s+1);
            v[j]=1;//回溯后,说明摆好棋子的状态已记录,当前的列标记还原 
        }
    dfs(x+1,s);//这里是难点,当k<n时,x在等于n之前就可能已经把全部棋子放好  
             //又由于当全部棋子都放好后的某个棋盘状态已经在前面循环时记录了  
           //因此为了处理多余行,令当前位置先不放棋子,搜索在下一行放棋子的情况 

}
int main()
{
    while(scanf("%d%d",&n,&k))
    {
        if(n==-1&&k==-1)//输入结束 
            break;
        for(int i=1;i<=n;i++)
        {
            scanf("%s",map+1);
            for(int j=1;j<=n;j++)
                if(map[j]=='.')
                    f[i][j]=0;
                else
                    f[i][j]=1;
            v[i]=1;
        }
        ans=0;
        dfs(1,0);//注意初始化的值
        printf("%d\n",ans);
    }
    return 0;
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值