wa5,6,8,9,11,救命
  • 板块P2802 回家
  • 楼主shimao
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/12/5 21:31
  • 上次更新2023/11/5 06:35:00
查看原帖
wa5,6,8,9,11,救命
312121
shimao楼主2020/12/5 21:31
#include<bits/stdc++.h>
using namespace std;
#define inf 1000000000
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
bool visited[30][30];
int ans=inf,n,m;
int board[30][30];
void dfs(int time,int blood,int x,int y){
	if(blood==0||time>n*m)return;
	if(board[x][y]==4)blood=6;
	if(board[x][y]==3){
		ans=min(time,ans);
		return;
	}
	for(int i=0;i<4;i++){
		int tx=x+dx[i],ty=y+dy[i];
		if(tx>n||ty>m||tx<1||ty<1)continue;
		if(board[x][y]==0)continue;
		if(visited[x][y]==1)continue;
		visited[x][y]=1;
		dfs(time+1,blood-1,tx,ty);
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>board[i][j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(board[i][j]==2){
				dfs(0,6,i,j);
				if(ans==inf){
					cout<<"-1";
					return 0;
				}
				else{
					cout<<ans;
					return 0;
				}
			}
		}
}
2020/12/5 21:31
加载中...