zoukankan      html  css  js  c++  java
  • POJ 1321

      1 #include<iostream>
      2 #define MAXN 10
      3 using namespace std;
      4 
      5 char _m[MAXN][MAXN];
      6 bool mark[MAXN];
      7 int n;
      8 void DFS(int row);
      9 int k;
     10 int ans;
     11 int give_num();
     12 int main()
     13 {
     14     //freopen("acm.acm","r",stdin);
     15     int i;
     16     int j;
     17 
     18     while(cin>>n>>k)
     19     {
     20         ans = 0;
     21         //    memset(mark,false,sizeof(mark));
     22         for(i = 0; i < MAXN; ++ i)
     23         {
     24             mark[i] = false;
     25         }
     26         if(n == -1 && k == -1)
     27         {
     28             break;
     29         }
     30         for(i = 0; i < n; ++ i)
     31         {
     32             for(j = 0; j < n; ++ j)
     33             {
     34                 cin>>_m[i][j];
     35             }
     36         }
     37         if(k == 1)
     38         {
     39             cout<<give_num()<<endl;
     40             continue;
     41         }
     42         for(i = 0; i < n; ++ i)
     43         {
     44             if(n-i < k)
     45             {
     46                 break;
     47             }
     48             for(j = 0; j < n; ++ j)
     49             {
     50                 if(_m[i][j] == '#')
     51                 {
     52                     mark[j] = true;
     53                     -- k;
     54                     DFS(i+1);
     55                     ++ k;
     56                     mark[j] = false;
     57                 }
     58             }
     59         }
     60     //    cout<<k<<" - "<<endl;
     61         cout<<ans<<endl;
     62     }
     63 }
     64 
     65 int give_num()
     66 {
     67     int i;
     68     int j;
     69     int sum = 0;
     70     for(i = 0; i < n; ++ i)
     71     {
     72         for(j = 0; j < n; ++ j)
     73         {
     74             if(_m[i][j] == '#')
     75             {
     76                 ++ sum;
     77             }
     78         }
     79     }
     80     return sum;
     81 }
     82 
     83 void DFS(int row)
     84 {
     85     int i;
     86     if(n - row < k)
     87     {
     88         return;        
     89     }
     90     for(i = 0; i < n; ++ i)
     91     {
     92         if(_m[row][i] == '#' && !mark[i])
     93         {
     94             if(k - 1 == 0)
     95             {
     96                 ++ ans;
     97             //    DFS(row+1);
     98                 continue;
     99             }
    100             -- k;
    101             mark[i] = true;
    102             DFS(row+1);
    103             mark[i] = false;
    104             ++ k;
    105     //        DFS(row+1);
    106         }
    107     }
    108 //    if(k - 1 == 0)
    109     {
    110         DFS(row+1);
    111     }
    112 }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    2020-2021-1 20201329 《信息安全专业导论》第十一周学习总结
    python gui
    2020-2021-1 20201329 《信息安全专业导论》第十周学习总结
    2020-2021-1 20201329 《信息安全专业导论》第九周学习总结
    四则运算
    熟悉编程语言
    链表
    网站设计
    使用nmap扫描队友
    熟悉编程语言
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563365.html
Copyright © 2011-2022 走看看