你都没办法接收多组数据
楼上的明显不会通过。。。
题目的意思是不是求最短路径?
0.15S Wrong Answer....
#include<stdio.h>
#include<string.h>
/*
'.'代表没有怪物,'o'代表有小怪,'O'代表大怪,'#'代表的是不能走的石头
*/
struct
{
char mapnow[8][8];
char small;
char x,y;
char l;
} line[150000]={0};
int linenow=0;
int maxline=1;
int main(void)
{
int m,mm,n,nn,k;
int i,j;
while(scanf("%d%d%d",&m,&n,&k)!=EOF)
{
linenow=0;
maxline=1;
memset(line,0,sizeof(line));
for(i=0;i<m;i++) scanf("%s",line[linenow].mapnow[i]);
if(line[linenow].mapnow[0][0]=='o') line[linenow].small++;
if(line[linenow].mapnow[0][0]=='O')
if(k==0) line[linenow].small++; else { printf("-1"); goto end; }
if(line[linenow].mapnow[0][0]=='#') { printf("-1"); goto end; }
line[linenow].mapnow[0][0]='.';
line[linenow].x=0;
line[linenow].y=0;
line[linenow].l++;
if(line[linenow].x==m && line[linenow].y==n) { printf("1"); goto end; }
mm=m-1;
nn=n-1;
for(linenow=0;linenow<maxline;linenow++)
{
if(line[linenow].x<mm)
{
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='o')
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='.')
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].x>0)
{
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='o')
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='.')
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].y<nn)
{
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='o')
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='.')
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].y>0)
{
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='o')
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='.')
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(maxline>100000) { printf("-1"); goto end; }
}
end: ;
}
return 0;
}
我用样例和自己的数据测的没有问题啊,ACM不像OI那样,还需要多组数据测试...