#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
struct node{
int x,y,nvsb,tlprtn,s;
};
node node_min(node p,node q){
if(p.s!=q.s){
return p.s>q.s?q:p;
}
if(p.nvsb+p.tlprtn!=q.nvsb+q.tlprtn){
return (p.nvsb+p.tlprtn)>(q.nvsb+q.tlprtn)?q:p;
}
else{
return p.nvsb>q.nvsb?q:p;
}
}
bool vis[355][355][20][20],sgt[355][35];
int chf[355][355];
int n,m,c1,c2,d,Sx,Sy,Tx,Ty;
int mp[355][355];
const int dx[]={1,0,-1,0,1,-1,-1,1};
const int dy[]={0,1,0,-1,1,1,-1,-1};
void look(int x,int y,int k){
for(int i=0;i<k;i++){
chf[max(x-i,1)][max(y-(k-i),1)]++;
chf[max(x-i,1)][min(y+(k-i),m)+1]--;
chf[min(x+i,n)][max(y-(k-i),1)]++;
chf[min(x+i,n)][min(y+(k-i),m)+1]--;
}
}
queue<node>que;
node ans=(node){0,0,77777777,88888888,99999999};
void BFS(){
while(!que.empty()){
node fnt=que.front();
que.pop();
if(fnt.s>ans.s){
continue;
}
if(fnt.x==Tx&&fnt.y==Ty){
ans=node_min(fnt,ans);
continue;
}
for(int i=0;i<8;i++){
int xx=fnt.x+dx[i];
int yy=fnt.y+dy[i];
if(xx<1||xx>n||yy<1||yy>m||mp[xx][yy]>0)continue;
if(sgt[xx][yy]){
if(vis[xx][yy][fnt.nvsb+1][fnt.tlprtn]||fnt.nvsb+1>c1)continue;
vis[xx][yy][fnt.nvsb+1][fnt.tlprtn]=1;
que.push((node){xx,yy,fnt.nvsb+1,fnt.tlprtn,fnt.s+1});
}
else{
if(vis[xx][yy][fnt.nvsb][fnt.tlprtn])continue;
vis[xx][yy][fnt.nvsb][fnt.tlprtn]=1;
que.push((node){xx,yy,fnt.nvsb,fnt.tlprtn,fnt.s+1});
}
}
if(fnt.tlprtn+1>c2)continue;
for(int i=0;i<4;i++){
int xx=fnt.x+dx[i]*d;
int yy=fnt.y+dy[i]*d;
if(xx<1||xx>n||yy<1||yy>m||mp[xx][yy]>0)continue;
if(sgt[xx][yy]){
if(vis[xx][yy][fnt.nvsb+1][fnt.tlprtn+1]||fnt.nvsb+1>c1)continue;
vis[xx][yy][fnt.nvsb+1][fnt.tlprtn+1]=1;
que.push((node){xx,yy,fnt.nvsb+1,fnt.tlprtn+1,fnt.s+1});
}
else{
if(vis[xx][yy][fnt.nvsb][fnt.tlprtn+1])continue;
vis[xx][yy][fnt.nvsb][fnt.tlprtn+1]=1;
que.push((node){xx,yy,fnt.nvsb,fnt.tlprtn+1,fnt.s+1});
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>c1>>c2>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
string s;
cin>>s;
switch(s[0]){
case 'S':{
Sx=i;
Sy=j;
mp[i][j]=-1;
que.push((node){Sx,Sy,0,0,0});
vis[i][j][0][0]=1;
break;
}
case 'T':{
Tx=i;
Ty=j;
mp[i][j]=-2;
break;
}
case '.':{
mp[i][j]=0;
break;
}
default:{
int sgtt=0;
for(int i=0;i<s.size();i++){
sgtt=(sgtt<<1)+(sgtt<<3)+(s[i]^'0');
}
mp[i][j]=sgtt;
look(i,j,sgtt);
break;
}
}
}
}
for(int i=1;i<=n;i++){
int sum=0;
for(int j=1;j<=m;j++){
sum+=chf[i][j];
if(sum>0){
sgt[i][j]=1;
}
}
}
BFS();
if(ans.s==99999999)cout<<-1<<endl;
else cout<<ans.s<<" "<<ans.nvsb<<" "<<ans.tlprtn<<endl;
return 0;
}
#1,#4,#6,#8,#11,#13,#19,#20:AC
其余均WA......
咋都看不出来错误,求大佬帮助/kel