10分求助
查看原帖
10分求助
1200401
wnqnld_llx楼主2024/11/24 12:51
#include<bits/stdc++.h>
using namespace std;
int n,x,y,ans;
const int N=101;
int a[N][N],vis[N][N];
void dfs(int x,int y,int already){
	//cout<<x<<" "<<y<<" "<<already<<"\n";
	ans=max(already,ans);
	int nx,ny;
	for(int i=x+1;i<=n;i++){
		if(vis[i][y]){
			break;
		}
		if(a[i][y]==0&&!vis[i][y]){
			nx=i,ny=y;
			vis[nx][ny]=1;
			already+=i-x;
			dfs(nx,ny,already);
			already-=i-x;
			vis[nx][ny]=0;
			break;
		}
	}
	for(int i=x-1;i>=1;i--){
		if(vis[i][y]){
			break;
		}
		if(a[i][y]==0&&!vis[i][y]){
			nx=i,ny=y;
			vis[nx][ny]=1;
			already+=x-i;
			dfs(nx,ny,already);
			already-=x-i;
			vis[nx][ny]=0;
			break;
		}
	}
	for(int i=y+1;i<=n;i++){
		if(vis[x][i]){
			break;
		}
		if(a[x][i]==0&&!vis[x][i]){
			nx=x,ny=i;
			vis[nx][ny]=1;
			already+=i-y;
			dfs(nx,ny,already);
			already-=i-y;
			vis[nx][ny]=0;
			break;
		}
	}
	for(int i=y-1;i>=1;i--){
		if(vis[x][i]){
			break;
		}
		if(a[x][i]==0&&!vis[x][i]){
			nx=x,ny=i;
			vis[nx][ny]=1;
			already+=y-i;
			dfs(nx,ny,already);
			already-=y-i;
			vis[nx][ny]=0;
			break;
		}
	}
}
signed main(){
	cin>>n>>x>>y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++) cin>>a[i][j];
	}
	vis[x][y]=1;
	dfs(x,y,0);
	cout<<ans;
	return 0;
}
2024/11/24 12:51
加载中...