zoukankan      html  css  js  c++  java
  • POJ 1321

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=65959#problem/A

    用dfs做的;

    这道题和在棋盘上放皇后的题还是不一样的;

    区别在于,放皇后的那题只要求不同行,不同列,不在一条斜线上,可以不断的向下递归,如果有一行无法满足条件,停止递归即可;

    但是这个题不同,这个题还有限制;

    需要遍历到每一个有可能的地方;

    AC代码:

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    char s[15][15];
    int vis[15],ans,n,m;
    void dfs(int x,int sum)
    {
        if(sum==m)
        {
            ans++;
        }
        for(int i=x; i<n; i++)//保证了它能遍历到每一个节点;
        {
            for(int j=0; j<n; j++)
            {
                if(s[i][j]=='#'&&vis[j]==0)
                {
                    vis[j]=1;
                    dfs(i+1,sum+1);//按行遍历,标记列数;
                    vis[j]=0;//回溯
                }
            }
        }
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            if(n==-1&&m==-1)
            {
                break;
            }
            ans=0;
            memset(vis,0,sizeof(vis));
            for(int i=0; i<n; i++)
            {
                scanf("%s",s[i]);
            }
            dfs(0,0);
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    20210123
    20210122
    20210121
    20210120
    2020119
    20210118
    20210117
    20210116
    例2-8
    例2-6
  • 原文地址:https://www.cnblogs.com/qioalu/p/4916494.html
Copyright © 2011-2022 走看看