zoukankan      html  css  js  c++  java
  • poj 1321 深搜题

    题目有些类似八皇后的问题,棋盘的形状是什么样对于解题并无影响,难点在于如何处理

    给定棋子数 和 棋盘行列数数的关系;

    行列数n = k 时,

    k<n时

    #include<iostream>
    #include<string>

    using namespace std;

    int n,k,sum;
    char map[10][10];//二维数组存储数据
    bool fangzhi[110];//判断棋盘中是否放置了棋子,标记作用
    void dfs(int x,int y)//x 指代的是棋盘搜索的行数, y代表的是已经放置的棋子数
    {
    if(y == k) // 如果已经放置的棋子数等于 题目中要求放置的棋子数,那么方案数sum加1; 
    {
    sum ++;
    return;
    }
    if(x >n) //如果行数超过了图的范围,返回
    {
    return;
    }
    for(int i=1;i<=n;i++) 
    {
    if(!fangzhi[i] && map[x][i] == '#')
    {
    fangzhi[i] = 1;//如果第x行 的第i个数满足条件,则放置上棋子,然后继续往下一行下一列搜索;
    dfs(x+1,y+1);
    fangzhi[i] = 0; 还原棋子,以便后面能继续搜索其他方案
    }
    }
    dfs(x+1,y);//这是棋子数小于棋盘行列数的情况
    }
    int main()
    {
    while(cin>>n>>k,n != -1 && k != -1)
    {
    memset(fangzhi,0,sizeof(fangzhi));
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=n;j++)
    cin>>map[i][j];
    }
    sum = 0;

    dfs(1,0); //从第一行开始搜索
    cout<<sum<<endl;
    }
    }

  • 相关阅读:
    React 之 jsx
    React 之 初识
    vue 之 svg
    c#进阶 之 特性
    c#进阶 之 反射Reflection
    面试题解答分析
    c#进阶 之 泛型
    c#进阶 之 修饰符
    c#进阶 之 方法汇总
    微信开发学习(二)
  • 原文地址:https://www.cnblogs.com/lfyy/p/2751497.html
Copyright © 2011-2022 走看看