• hdu 1045 要求全部逐一搜索完的深搜


    #include<stdio.h>

    #include<string.h>


    int visit[10][10];
    char map[10][10];
    int n,ans,ss,t;


    int judge(int x,int y)
    {
    int k;
    if(x<0||x>=n||y<0||y>=n)
    return 0;
    if(visit[x][y]==1||map[x][y]=='X')
    return 0;
    for(k=x-1;k>=0;k--)
    {
    if(map[k][y]=='X')//判断这一行中间是否有X
    break;
    if(visit[k][y]==1)
    {
    return 0;
    }
    }
    for(k=y-1;k>=0;k--)
    {
    if(map[x][k]=='X')//判断这一列中间是否有X
    break;
    if(visit[x][k]==1)
    return 0;
    }
    return 1;//严格的筛选!
    }


    void dfs(int ss)// ss表示此时搜索到第n个方格
    {
    int x,y;
    if(ss==n*n)
    {
    if(ans<t)
    ans=t;
    return ;
    }
    x=ss/n;y=ss%n;
    if(judge(x,y))
    {
    t++;
    visit[x][y]=1;
    dfs(ss+1);
    t--;
    visit[x][y]=0;
    dfs(ss+1);
    }
    else
    dfs(ss+1);
    }


    int main()
    {
    int i;
    while(scanf("%d",&n),n)
    {
    t=0;
    for(i=0;i<n;i++)
    scanf("%s",map[i]);
    memset(visit,0,sizeof(visit));
    ans=0;
    dfs(0);
    printf("%d ",ans);
    }
    return 0;
    }

  • 相关阅读:
    c++中的 三/五原则
    3. 无重复字符的最长子串
    c++中的单例模式
    bfs 以及 dfs 常用解题思路
    经济学的三个问题
    gtihub 上一些值得学习的项目
    994. 腐烂的橘子
    96. 不同的二叉搜索树
    some idea
    Libco协程库
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5437014.html
Copyright © 2020-2023  润新知