好无语,竟然是因为输出格式搞了我几天,为什么就不注意一下呢,case:1,一直都是输出1,没有输出别2345,我竟然不知道!!!!!
#include<stdio.h>
#include<string.h>
#define mod 100000
typedef struct Node{
int i,j,st,time;
}Node;
Node que[100000];
int vis[120][120][3],dire[4][2]={-1,0,0,1,1,0,0,-1},foundED[120][120];
char maze[120][120];
main()
{
int T,n,m,t,found,i,j,head,tail,a,b,rs,k,per[2][3],l=0;
Node tmp;
scanf("%d",&T);
per[0][2]='D';
per[1][2]='E';
while(T--){
scanf("%d%d%d",&n,&m,&t);
found=0;
for(i=1;i<=n;i++){
scanf("%s",&maze[i][1]);
if(found!=3){
for(j=1;maze[i][j];j++){
if(maze[i][j]=='S'){
maze[i][j]='.';
que[0].i=i;
que[0].j=j;
que[0].time=que[0].st=0;
vis[i][j][0]=1;
found++;
}
if(maze[i][j]=='E'||maze[i][j]=='D'){
per[maze[i][j]-'D'][0]=i;
per[maze[i][j]-'D'][1]=j;
found++;
}
}
}
}
memset(maze[n+1],0,sizeof(maze[n+1]));
for(i=0;i<2;i++){
for(j=0;j<4;j++){
a=per[i][0]+dire[j][0];
b=per[i][1]+dire[j][1];
while(maze[a][b]=='.'){
foundED[a][b]+=per[i][2];
a+=dire[j][0];
b+=dire[j][1];
}
}
}
head=k=found=0;
tail=1;
printf("Case %d:\n",++l);
while(head!=tail){
tmp=que[head];
rs=foundED[que[head].i][que[head].j];
if(rs=='E'){
if(que[head].st==1){
printf("%d\n",que[head].time);
found=1;
break;
}
else{
que[head].st=2;
vis[que[head].i][que[head].j][2]=1;
}
}
else if(rs=='D'){
if(que[head].st==2){
printf("%d\n",que[head].time);
found=1;
break;
}
else{
que[head].st=1;
vis[que[head].i][que[head].j][1]=1;
}
}
else if(rs=='E'+'D'){
printf("%d\n",que[head].time);
found=1;
break;
}
if(que[head].time<t)
for(i=0;i<4;i++)
{
a=que[head].i+dire[i][0];
b=que[head].j+dire[i][1];
if(!vis[a][b][que[head].st]&&maze[a][b]=='.')
{
vis[a][b][que[head].st]=1;
que[tail].i=a;
que[tail].j=b;
que[tail].st=que[head].st;
que[tail].time=que[head].time+1;
tail=(tail+1)%mod;
}
}
head=(head+1)%mod;
}
if(!found) printf("-1\n");
memset(vis,0,sizeof(vis));
memset(foundED,0,sizeof(foundED));
}
}