关闭

DFS专攻:POJ 1111

596人阅读 评论(0) 收藏 举报

题意就是求周长,给出坐标,X能连成怎么样的图形都求出周长……

刚开始边界错了,今天重新看了又调了好久才AC……因为X和其他的如果相连的话,会有两个重的而且都不能要,比如:XX,两个X中间的两个两条都不能取,所以-2,因为-2了所以这个X就不能再要了,让其变成 '.' 就行了……因为只有上下左右的边才会重合,所以四个顶角的那四个就不用考虑啦……

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
using namespace std;
int n,m,p,q,sum;
char a[22][22];
void dfs(int x,int y)
{
    if(a[x][y]=='.') return;
    a[x][y]='.';
    sum+=4;
    if(a[x+1][y]=='X') sum-=2;
    if(a[x-1][y]=='X') sum-=2;
    if(a[x][y+1]=='X') sum-=2;
    if(a[x][y-1]=='X') sum-=2;
    dfs(x,y+1);
    dfs(x,y-1);
    dfs(x+1,y);
    dfs(x-1,y);
    dfs(x+1,y+1);
    dfs(x-1,y+1);
    dfs(x+1,y-1);
    dfs(x-1,y-1);
}
int main()
{
    while(cin>>n>>m>>p>>q&&(n||m||p||q))
    {
        int i,j;
        sum=0;
        mem(a,'.');
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                cin>>a[i][j];
        dfs(p,q);
        cout<<sum<<endl;
    }
    return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:363586次
    • 积分:8072
    • 等级:
    • 排名:第2647名
    • 原创:456篇
    • 转载:8篇
    • 译文:0篇
    • 评论:47条
    最新评论