问题标题: 酷町堂:1287 挑战算周长(perimeter):80分

0
0
已解决
屠永乐
屠永乐
高级守护
高级守护
#include<iostream>
using namespace std;
int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,-1},{-1,1},{1,1},{-1,-1}};
int n,m,x,y,ans;
char a[22][22];
bool b[22][22];
void dfs(int c,int r)
{
    b[c][r]=true;
    for(int i=0;i<8;i++)
    {
        int nc=c+dir[i][0];
        int nr=r+dir[i][1];
        if(nc>=0&&nc<=m+1&&nr>=0&&nr<=n+1&&!b[nc][nr])
        {
            if(a[nc][nr]=='.'&&i<4)ans++;
            else if(a[nc][nr]=='X')dfs(nc,nr);
        }
    }
}
int main()
{
    cin>>m>>n>>x>>y;
    for(int i=0;i<=20;i++)
    for(int j=0;j<=20;j++)
    a[i][j]='.';
    for(int i=1;i<=m;i++)
    for(int j=1;j<=n;j++)
    cin>>a[i][j];
    dfs(x,y);
    cout<<ans;
    return 0;
} 

0
已采纳
赵毅恒
赵毅恒
资深守护
资深守护

其实这道题就是一道变形的迷宫

直接用迷宫排除点

再将剩下的#排在一起就行

0
我要回答