zoukankan      html  css  js  c++  java
  • 1217:棋盘问题

    题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1217

     1 #include <bits/stdc++.h>
     2 const int max_n=10;
     3 using namespace std;
     4 bool vis[max_n];//记录某一行棋子是否有棋子摆放
     5 char mp[max_n][max_n];
     6 int n,k,sum;
     7 void dfs(int x,int y)//搜索函数
     8 {
     9     if(y>=k){sum++;   return;}//当棋子摆放完时,计数器加一,回溯
    10     for (int i = x; i < n; i++) {
    11         for (int j = 0; j < n; j++) {
    12             if (!vis[j] && mp[i][j] == '#') //棋子只能在棋盘区域
    13             {
    14                 vis[j] = true;//设置为本行有棋子了
    15                 dfs(i + 1, y + 1);//进行下一列的计算
    16                 vis[j] = false;//递归结束后,设置本行没有棋子了
    17             }
    18         }
    19     }
    20 }
    21 int main()
    22 {
    23     while(scanf("%d %d",&n,&k)==2)//scanf输入两个数返回值为2
    24     {
    25         if(n==-1&&k==-1)break;
    26         memset(vis,false,sizeof(vis));//初始化
    27         memset(mp,false,sizeof(mp));
    28         for(int i=0;i<n;i++)cin>>mp[i];
    29         sum=0;
    30         dfs(0,0);
    31         printf("%d
    ",sum);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    11、sqlite
    10、正则
    9、bs4
    8、异常与import
    7、文件
    6、函数
    4、字典及集合
    3、元组
    1、python基本语法
    shell编程 15 --- shell 脚本调试技巧
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13709520.html
Copyright © 2011-2022 走看看