#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,ok,len;
char o[1010][1010],e;
bool u[1010][1010];
void dfs(int x,int y)
{
if(ok==1) return;
if(len==0)
{
ok=1;
return;
}
if(u[x-1][y]!=true && o[x-1][y]!=o[x][y] && o[x-1][y]>o[x+1][y] && o[x-1][y]>o[x][y+1] && o[x-1][y]>o[x][y-1])
{
u[x-1][y]=true;
len--;
cout<<o[x-1][y];
dfs(x-1,y);
}
else if(u[x+1][y]!=true && o[x+1][y]!=o[x][y] && o[x+1][y]>o[x-1][y] && o[x+1][y]>o[x][y+1] && o[x+1][y]>o[x][y-1])
{
u[x+1][y]=true;
len--;
cout<<o[x+1][y];
dfs(x+1,y);
}
else if(u[x][y-1]!=true && o[x][y-1]!=o[x][y] && o[x][y-1]>o[x][y+1] && o[x][y-1]>o[x+1][y] && o[x][y-1]>o[x-1][y])
{
u[x][y-1]=true;
len--;
cout<<o[x][y-1];
dfs(x,y-1);
}
else if(u[x][y+1]!=true && o[x][y+1]!=o[x][y] && o[x][y+1]>o[x][y-1] && o[x][y+1]>o[x+1][y] && o[x][y+1]>o[x-1][y])
{
u[x][y+1]=true;
len--;
cout<<o[x][y+1];
dfs(x,y+1);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>o[i][j];
if(o[i][j]!='#') len++;
if(o[i][j]!='#' && e<o[i][j])
{
e=o[i][j];
x=i; y=j;
}
}
}
len--;
u[x][y]=true;
cout<<e;
dfs(x,y);
return 0;
}
测试点