这是P5486,为什么没有题解?
这是我的代码,20分求条。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,m,s,t,rec[110]={},ansrec[110]={};
bool cu[110][36]={};
char et;
void dfs(int d,int p,int hf){
if(d==t){
if(hf<ansrec[0]){
ansrec[0]=hf;
for(int i=s;i<=t;i++) ansrec[i]=rec[i];
}else if(hf==ansrec[0]){
bool flag=false;
for(int i=s;i<=t;i++) if(ansrec[i]<rec[i]){
flag=true;
break;
}
if(!flag) for(int i=s;i<=t;i++) ansrec[i]=rec[i];
}
}else{
if(cu[d+1][p]) rec[d+1]=p,dfs(d+1,p,hf);
else if(d==t-1) dfs(d+1,p,hf);
else for(int i=1;i<=n;i++){
if(cu[d+1][i]&&i!=p&&hf+1<=ansrec[0]) rec[d+1]=i,dfs(d+1,i,hf+1);
}
}
}
int main(){
int _=0;
bool oouted=false;
while(scanf("%d%d",&m,&n)==2&&(n!=0||m!=0)){
if(oouted) puts("\n");
ansrec[0]=0x3f3f3f;et=getchar();
for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){
et=getchar();
cu[i][j]=(et=='O');
}et=getchar();}
scanf("%d%d",&s,&t);
for(int i=1;i<=n;i++) if(cu[s][i]) rec[s]=i,dfs(s,i,0);
printf("Case %d:\n\n",++_);
if(ansrec[0]==0x3f3f3f) printf("Not available");
else{
int w=ansrec[s],us=s,ud=s;
bool outed=false;
for(int i=s;i<=t;i++){
if(ansrec[i]!=w){
if(!outed) printf("%c: %d-%d",(ansrec[us]+'A'-1),us,ud+1),outed=true;
else printf("\n%c: %d-%d",(ansrec[us]+'A'-1),us,ud+1);
us=ud=i,w=ansrec[i];
}else ud=i;
}
}
memset(cu,0,sizeof cu);
memset(rec,0,sizeof rec);
memset(rec,0,sizeof ansrec);
oouted=true;
}
return 0;
}
另外这道题为什么不开放数据???