2. 领地
XJOI - 题目ID:1229必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
时间:1s 空间:256M
题目描述:
给你一个地图,你位于地图中的某一个点,只要你能达到的位置都可以成为你的领地。问你有多少位置可以成为你的领地。你只能走上下左右四个方向。
输入格式:
输入一行,包含两个整数n,mn,m.
接下来mm行每行nn个字符。
#表示障碍物,不能经过
@ 表示你的位置
其他都是空地
输出格式:
输出一个整数。
样例输入:
样例输出:
45
约定:
1 <=n ,m<=20 1 <=n ,m<=20
提示:
下面是我的0分代码:
#include <bits/stdc++.h>
using namespace std;
char a[55][55];
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1},n,m,ans=0;
bool v[55][55];
void f(int x,int y,int sum){
if(sum<ans){
return ;
}
int s=0;
for(int i=0;i<=3;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx>n||ny>m||nx<=0||ny<=0||v[nx][ny]==1||a[nx][ny]=='#'){
s++;
continue;
}
v[nx][ny]=1;
f(nx,ny,sum+1);
v[nx][ny]=0;
}
if(s==4){
if(sum>ans){
ans=sum;
return;
}
return ;
}
}
int main(){
cin>>n>>m;
int x,y,x1,y1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='@'){
x=i;
x=j;
}
}
}
v[x][y]=1;
f(x,y,0);
cout<<ans;
return 0;
}
哪位大佬能告诉我该怎么改
