• 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

  • 相关阅读:
    【NOIP16提高组】换教室
    【扬中集训Day6T1】 白日梦
    【POJ 1061】 青蛙的约会
    【扬中集训DAY5T1】 交换矩阵
    【USACO】 Balanced Photo
    【USACO】 Balanced Lineup

    POJ P3352 Road Construction 解题报告
    洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
    洛谷 P2300 合并神犇 解题报告
  • 原文地址:https://www.cnblogs.com/YipWingTim/p/2225954.html
Copyright © 2020-2023  润新知