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

    //1321、我分分钟都可以A掉你你都不知道系咩事、

    A掉的那一刻,我盯着屏幕看了好久,这真是一道让我痛苦万分的题目,

    递归啊递归。。。是看了discuss里有个人贴的错误代码才获得灵感。。。

    思考了那么久,是那么的值得,差点放弃了。。。

    另外这道题要深刻总结,网上看了两种更简洁的方法,明天具体分析。

    真是一道关于深搜、递归的好题。

    View Code
     1 #include<iostream>
    2 #include<cstring>
    3 #include<cstdio>
    4 using namespace std;
    5
    6 char map[9][9];
    7 int size,num;
    8 int sum;
    9 bool vrow[9],vcolumn[9];
    10
    11 #define ONLINE
    12
    13 void online()
    14 {
    15 #ifdef ONLINE
    16 #else
    17 freopen("F:\\t1.txt","r",stdin);
    18 freopen("F:\\t2.txt","w",stdout);
    19 #endif
    20 }
    21
    22 void dfs(int row,int deepth)
    23 {
    24 if(deepth==num)
    25 {
    26 sum++;
    27 return;
    28 }
    29 if(row>size) //显然这个判断要放后面
    30 return ;
    31 for(int i=1;i<=size;i++)
    32 {
    33 if(map[row][i]=='#'&&vrow[row]&&vcolumn[i])
    34 {
    35 vrow[row]=false;
    36 vcolumn[i]=false;
    37 dfs(row+1,deepth+1);
    38 vrow[row]=true;
    39 vcolumn[i]=true;
    40 }
    41 }
    42 dfs(++row,deepth);
    43 }
    44
    45 void init()
    46 {
    47 cin>>size>>num;
    48 while(size!=-1||num!=-1)
    49 {
    50 sum=0;
    51 memset(map,'.',sizeof(map));
    52 memset(vrow,true,sizeof(vrow));
    53 memset(vcolumn,true,sizeof(vcolumn));
    54 for(int i=1;i<=size;i++)
    55 for(int j=1;j<=size;j++)
    56 cin>>map[i][j];
    57 dfs(1,0);
    58 cout<<sum<<endl;
    59 cin>>size>>num;
    60 }
    61 }
    62
    63
    64 int main()
    65 {
    66 online();
    67 init();
    68 return 0;
    69 }

    明天开讨论会,还要准备PPT,明天再总结。。。

    想了一个内环,其中42语句改成dfs(row+1,step)也可以。

    另外附加两个比较简洁的写法,是网上找的。。。

    这个有状态压缩。

    http://www.cnblogs.com/staginner/archive/2011/08/23/2151384.html

    这个要从他的写法里学会用while写深搜。。。

    其中对pos++这一句很经典,和我的42行一样,需要仔细思考。

    为什么我的不能写row++,为什么他的写dfs(pos+1,a)就会超时?

    http://www.cnblogs.com/rainydays/archive/2011/06/21/2086386.html

  • 相关阅读:
    原生js实现Ajax的原理。
    js的双等号类型转换
    关于tween.js 封装的方法
    带你了解状态码
    css实现选项卡
    造粉神器使用说明
    云集-微信助手常见问题和注意事项(持续更新)
    400企业录音部分资料共计920份 下载
    我们只是虫子!我们真的是虫子吗?
    .Net码农学Android---快速了解数据存储
  • 原文地址:https://www.cnblogs.com/YipWingTim/p/2225954.html
Copyright © 2011-2022 走看看