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

    poj 1321

    题目大意:

    解决:dfs+回溯,类似于八皇后问题,分两种情况,第n行放或者不放,放的话回溯,不放的话直接进入下一行

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int cnt,n,k;
    char map[10][10];
    int r[10],c[10];
    
    void dfs(int cur_step,int cur_cnt)
    { 
       if(cur_cnt == k){cnt++;return;}
       if(cur_step == n)return;
       for(int i=0;i<n;i++)
       {
             if(map[cur_step][i]=='#' && !r[cur_step] && !c[i])
             {
                  r[cur_step]=1;
                  c[i]=1;
                  dfs(cur_step+1,cur_cnt+1);
                  r[cur_step]=0;
                  c[i]=0;  
             }
       }
       //由于是多行,可能某一行不用放,这种情况是解决在cur_step行没放
     //而直接进入下一行的情况
       dfs(cur_step+1,cur_cnt);
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&k), n!=-1 && k!=-1)
        {
            memset(r,0,sizeof(r));
            memset(c,0,sizeof(c));
            cnt=0;
            int i;
            for(i = 0; i < n; i++)scanf("%s",map[i]);
            dfs(0,0);  
            printf("%d\n",cnt);
        }
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    javase 超市库存系统
    Javase 简单代码练习
    Javase 简单练习
    SQL表连接查询
    SQL多表查询
    SQL表查询
    SQL数据查询2
    SQL数据查询
    SQL增删改
    AutoCompleteTextView的使用
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2170278.html
Copyright © 2011-2022 走看看