zoukankan      html  css  js  c++  java
  • poj 1111 新手路过

     这是一道比较适合我的深搜题,自我感觉这题比较好,做了很久才搞定,下面附代码;

    注意在x处理周长时考虑全面;

    #include<iostream>
    #include<fstream>
    #include<cstring>
    using namespace std;
    char map[25][25];
    int visit[25][25];
    int count;
    int m,n;
    int bam[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};

    void dfs(int a,int b)//开始深搜
    {

    visit[a][b]=1;
    int i;
    for(i=0;i<8;i++)
    {
    int x=a+bam[i][0];
    int y=b+bam[i][1];

    if(x>=1&&x<=m&&y>=1&&y<=n)排除超出数组边界的范围
    {

    if(map[x][y]=='X'&&visit[x][y]==0)//判断符合数组范围内的点是否是x,如果是开始深搜
    dfs(x,y);

    else if(map[x][y]=='.'&&(x==a||y==b))

    //同时判断符合数组范围内的点在上下左右四个方向是否有‘。’,有的话count加一
    {
    count++;

    }
    }
    else if(x==a||y==b)超出数组范围的点(即处理在边界的点)
    count++;
    }

    }

    int main ()

    {

    int x,y;

    ifstream cin("in.txt");
    while(cin>>m>>n>>x>>y,m+n+x+y)
    {

    memset(visit,0,sizeof(visit));//数组初始化
    memset(map,0,sizeof(map));
    for(int i=1;i<=m;i++)
    {
    for(int j=1;j<=n;j++)
    {
    cin>>map[i][j];
    }

    }
    count=0;
    dfs(x,y);
    cout<<count<<endl;;
    }
    return 0;
    }

  • 相关阅读:
    强连通分量(Kosaraju)
    拓扑排序
    树状数组BIT
    差分
    RMQ(ST表)
    LCA(Tarjan)
    LCA(ST倍增)
    海亮SC2019 树上数数(转载)
    海亮SC
    【十二省联考2019】异或粽子/可持久化01trie
  • 原文地址:https://www.cnblogs.com/lfyy/p/2693160.html
Copyright © 2011-2022 走看看