我的第x个问题

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;
}	

哪位大佬能告诉我该怎么改

3 个赞