zoukankan      html  css  js  c++  java
  • poj 1321 棋盘问题 简单DFS

    题目链接:http://poj.org/problem?id=1321

    很久没有敲搜索了啊,今天敲了个水题练练手,哈哈。。。。

    题目大意: 就是求在n*n的方格上放置k个棋子的方案数

    代码:

     1 #include<iostream>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cstdio>
     5 using namespace std;
     6 int n,k;
     7 char map[10][10];
     8 int visit[10];
     9 int sum;
    10 int ans;
    11 bool Jude(int k,int num)
    12 {
    13    int i;
    14    if(k==-1) return 1;
    15    if(map[num][k]=='.') return 0; 
    16    for(i=0;i<num;i++)
    17        if(k==visit[i]) break;
    18    if(i== num ) { visit[num]=k; sum++; return 1;}
    19    else return 0;
    20 }
    21 void dfs(int row)
    22 {
    23    if(sum==k) {ans++;return ;}
    24    if(row ==n && sum<k) return ;
    25    int i=-1;
    26    while(i<n)
    27    {
    28      if(Jude(i,row))
    29      {
    30           dfs(row+1);
    31           if(i>=0) { visit[row]=-1;sum--;}
    32      } 
    33      i++;
    34    }
    35 }
    36 int main()
    37 {
    38    while(scanf("%d%d",&n,&k)!=EOF)
    39    {
    40        if(n==-1 && k==-1) break;
    41        for(int i=0;i<n;i++) scanf("%s",map[i]);
    42 
    43        memset(visit,-1,sizeof(visit));
    44        sum=0;
    45        ans=0;
    46        int i=-1;
    47        while(i<n)
    48        {
    49           if(Jude(i,0)) 
    50              {
    51                 dfs(1);
    52                 if(i>=0) { visit[0]=-1;sum--;}
    53              }
    54           i++;
    55        }
    56        cout<<ans<<endl;
    57           
    58    }
    59    return 0;
    60 }
  • 相关阅读:
    JS连接数据库“实例”
    sql数据字典
    硬件防火墙的配置
    xxx
    rhs属性文件删除法
    思科pix防火墙配置实例大全
    SilverLight中的画刷小结
    数据库表间的连接总结
    导入Excel到Sql Server 2005 (转)
    关于Silverlight页面跳转的总结
  • 原文地址:https://www.cnblogs.com/xiaozhuyang/p/poj1321.html
Copyright © 2011-2022 走看看