记录编号 547764 评测结果 A
题目名称 梦那边的美好 最终得分 100
用户昵称 Gravatar夜莺 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2019-12-13 20:36:01 内存使用 3.20 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
int T,n,m,f[101][101],ii[4]={0,1,0,-1},jj[4]={-1,0,1,0};
int i1,j1,i2,j2;
char a[101][101];
void dfs(int i,int j,int ans){
	if(a[i][j]=='*'){
		if(ans<f[i2][j2])
			f[i2][j2]=ans;
		return;
	}
	for(int k=0;k<=3;k++){
		i+=ii[k];
		j+=jj[k];
		if(i<=n&&i>=1&&j<=m&&j>=1&&(a[i][j]=='.'||a[i][j]=='*')){
			if(ans<f[i][j]){
				f[i][j]=ans;
				dfs(i,j,ans+1);
			}
		}
		i-=ii[k];
		j-=jj[k];
	}
	return;
}
int main(){
	freopen("ESDT.in","r",stdin);
	freopen("ESDT.out","w",stdout);
	cin>>T;
	for(int i=1;i<=T;i++){
		cin>>n>>m;
		swap(n,m);
		for(int j=1;j<=n;j++)
			for(int k=1;k<=m;k++){
				cin>>a[j][k];
				f[j][k]=999999;
				if(a[j][k]=='@'){
					i1=j;
					j1=k;
				}
				if(a[j][k]=='*'){
					i2=j;
					j2=k;
				}
			}
		dfs(i1,j1,1);
		if(f[i2][j2]==999999)
			cout<<"Oh~ That's good~\n";
		else cout<<f[i2][j2]<<"\n";
	}
}