如下
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long col,date;
}g[105][105];
long long n,m,l,r,f[105][105];//ǰ:ÌìÊý, ºó:¹«Ô¢Êý
char c[105][105];
void outp(long long id,long long caseid)
{
printf("Case %lld:\n\n",caseid);
node u={id,r},ax[105];
long long cnt=0;
// cout<<u.col<<' '<<u.date<<'\n';
while(u.date>=l)
{
// cout<<cnt<<endl;
ax[++cnt]=u;
u=g[u.date][u.col];
// cout<<u.col<<' '<<u.date<<'\n';
}
// for(int i=1;i<=cnt;i++)
// {
// cout<<ax[i].col<<' '<<ax[i].date<<'\n';
// }
printf("%c: %lld-",ax[cnt].col+'A'-1,l);
for(int i=cnt-1;i>=1;i--)
{
if(ax[i].col!=ax[i+1].col)
{
printf("%lld\n%c: %lld-",ax[i+1].date+1,ax[i].col+'A'-1,ax[i].date);
}
}
cout<<r+1<<'\n';
}
int main()
{
long long d=1;
cin>>n>>m;//n:ÌìÊý, m:¹«Ô¢Êý
while(m!=0&&n!=0)
{
memset(f,0x3f,sizeof f);
memset(g,0x3f,sizeof g);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
cin>>l>>r;r--;
for(int i=1;i<=m;i++)
{
if(c[l][i]=='O')
f[l][i]=0,g[l][i].date=0,g[l][i].col=i;
}
for(int i=l+1;i<=r;i++)
{
for(int j=1;j<=m;j++)
{
if(c[i][j]=='X')continue;
for(int k=1;k<=m;k++)
{
if(c[i-1][k]=='X')continue;
if(j==k)
{
if(f[i-1][k]<f[i][j])
{
f[i][j]=f[i-1][k];
g[i][j].col=k;
g[i][j].date=i-1;
}
}
else
{
if(f[i-1][k]+1<f[i][j])
{
f[i][j]=f[i-1][k]+1;
g[i][j].col=k;
g[i][j].date=i-1;
}
}
}
}
}
long long ans=999,cl;
for(int i=1;i<=m;i++)
{
if(ans>f[r][i])
{
ans=f[r][i];
cl=i;
}
}
if(ans>=999)
{
printf("Case %lld:\n\n",d);
cout<<"Not available\n";
}
else
{
// cout<<ans<<endl;
outp(cl,d);
}
cin>>n>>m;d++;
}
return 0;
}