poj1321(简单的dfs)

作者: 42fighting | 来源:发表于2018-01-21 22:46 被阅读0次

(最近在做kuangbin带你飞专题)问题链接:棋盘问题
这是一道入门dfs的题目,以为n的比较小,所以完全可以用dfs的方法通过这一道题。
我们先讨论一下这一道题目的思路,要求棋子的横竖均只能有一个棋子,我们可以对行进行dfs,用一个记录数组表示列是否已经含有棋子,既1表示有,0表示没有。dfs的过程中,填充棋子的数量等于k时,此dfs结束cnt++返回上一层,若遍历的行号等于n既已出范围直接结束此层dfs。若本行可填,注意回溯。
另外要注意k的大小会比n要小,dfs的情况需要注意。
ac代码如下:

#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int k, n, cnt;
char s[10][10];
int col[10];
void dfs(int x, int num)
{
    if(num==k)
    {
        cnt++;
        return;
    }
    if(x==n)return;
    for(int i=0; i<n; i++)
        {
        if(s[x][i]=='#'&&!col[i])
        {
            col[i]=1;
            dfs(x+1, num+1);
            col[i]=0;
        }
    }
    if(x<n)
    dfs(x+1, num);
}

int main(void)
{
    while(scanf("%d%d", &n, &k))
    {
        cnt=0;
        memset(col, 0, sizeof(col));
        if(k==-1&&n==-1)
        break;
        for(int i=0; i<n; i++)
        scanf("%s", s[i]);
        dfs(0, 0);
        printf("%d\n", cnt);
    }
    return 0;
}

over

相关文章

  • poj1321(简单的dfs)

    (最近在做kuangbin带你飞专题)问题链接:棋盘问题这是一道入门dfs的题目,以为n的比较小,所以完全可以用d...

  • 百度之星

    01 题 简单dfs

  • 简单的谈谈dfs

    简单的说回溯法,递归就是将函数负责几遍。那么回溯法就是将for循环复制几遍。回溯法框架 为什么要把list的最后一...

  • DFS简单理解

    DFS(深度优先搜索) DFS是一种搜索算法,在我的理解中,它是通过一种类似树状的结构来进行搜索的,运用递归算法。...

  • 穷竭搜索

    DFS POJ 1979: Red and Black简单的DFS找四联通块即可。代码如下 POJ 3009: C...

  • 404. Sum of Left Leaves

    题目和思路 简单的递归 代码 my dfs 非递归

  • 简单的搜索 ----(dfs) 和 (bfs)简单的

    广搜(bfs)和 深搜(dfs) 先从广搜说起(bfs)广搜,字面感觉就是广面的搜索,其实就是这样的,我认为可以把...

  • @张坚 @Judy@DFS @几米 @司令 个人有个很有趣的小建议, 简单概括为:参众两院产生名单由dfs持有者投...

  • 2019-08-22 剑指 二叉树中和为某一值的路径

    很简单的DFS,但是不知道为何sum嵌套函数找不到变量?

  • DFS与BFS的简单应用

    1.统计叶子节点总数 参考前 中 后序或者层序遍历,用任意一种方法实现. 思路: 设置一个全局变量,每访问一个非空...

网友评论

    本文标题:poj1321(简单的dfs)

    本文链接:https://www.haomeiwen.com/subject/mftcaxtx.html