Advertisement

试题:算法训练与车的放置(蓝桥杯C++项目)

阅读量:

问题描述
在一个n乘n的棋盘上,每个格子最多只能放置一个车,并且需要确保任意两个车之间无法互相攻击,那么共有多少种不同的放置方式(车与车之间是无法区分的)
输入格式
输入包含一个正整数n
输出格式
输出一个整数,表示所有可能的放置方式数目
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释

复制代码
    #include  <bits/stdc++.h>
    using namespace std;
    int N;
    long long ans=1; //刚开始什么也不放也属于一种答案
    bool visited[10]; //标志被放置的列
    void dfs(int step) //表示从第step行开始放
    {
    if(step>N) return ; //如果超过规定的棋盘边界N,跳出。
    for(int i=1;i<=N;i++)
        if(!visited[i]) //如果这一列没有被放置
        {
            visited[i]=true; //在这个位置放置它
            ans++; //该情况的答案+1
            dfs(step+1); //肯定不能在同一行放了,跳到下一行

全部评论 (0)

还没有任何评论哟~