• POJ-1321-棋盘问题


    这题是深搜。

    搜索边界就是当我们走出棋盘并且棋子数目不为0,我们就返回。

    另一个边界就是,当棋子数目为0,无论在哪,我们都让方法数加一,然后返回。

    搜索的方向就是按行搜索,对列考察,如果是棋盘且此列没放过棋子,那我们就搜索这个点,此列标记为1。

    然后对这个点搜索之后,我们就要让这个深搜回溯,清空标记,让for循环的继续执行,考察这行是否还有点可以放。

    然后这行也可以选择不放,此时搜索下一行,棋子数目不变。

    #include <cstdio>
    #include <cstring>
    int map[10][10],vis[10];
    int d[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    char s[10];
    int n, k, ans;
    
    void dfs(int r,int k)
    {
        if (r==n&&k!=0)
            return;
        if (k==0) {
            ans++;
            return;
        }
        for (int j = 0; j < n;j++) {
            if (map[r][j]&&!vis[j]) {
                vis[j] = 1;
                dfs(r + 1, k - 1);
                vis[j] = 0;
            }
        }
        dfs(r + 1, k);
    }
    
    int main()
    {
        while (scanf("%d%d",&n,&k)&&n!=-1&&k!=-1) {
            memset(map, 0, sizeof(map));
            memset(vis, 0, sizeof(vis));
            for (int i = 0; i < n;i++) {
                scanf("%s", s);
                for (int j = 0; j < n; j++) {
                    if (s[j]=='#')
                        map[i][j] = 1;
                }
            }
            ans = 0;
            dfs(0, k);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Struts2文件上传
    Struts2文件下载
    使用ajax()方法和后台交互
    简单的写数据到txt文件
    JPA初体验(使用Hibernate4实现)
    动态删除ArrayList中的元素
    MySQL5.5.15 源码 cmake 安装
    HeartBeat启动关闭mysqld服务的脚本修改
    MySQL MyISAM 转 Innodb
    2038/01/19 11:14:07 MySQL
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10405357.html
Copyright © 2020-2023  润新知