#include #include using namespace std; char map[50][50]; int distan[12][12]; int jewels[12][3]; int mark[50][50]; int visit[12]; int sx,sy,ex,ey,dijige,youjige,cancollect,maxjewels,jieshu; int u,n,m,t,zhubao,flag; struct node { int x,y,step; }w,p; int dir[4][2]={1,0,-1,0,0,1,0,-1}; int bfs(int qx,int qy,int mx,int my) { queue q; w.x=qx;w.y=qy;w.step=0; while(!q.empty()) q.pop(); q.push(w); while(!q.empty()) { p=q.front(); q.pop(); if(p.x==mx&&p.y==my) return p.step; for(int i=0;i<4;i++) { w.x=p.x+dir[i][0]; w.y=p.y+dir[i][1]; w.step=p.step+1; if(w.x>=0&&w.x=0&&w.y=0&&weizhi==zhubao+1) { maxjewels=jewel; flag=1; jieshu=1; return; } if(weizhi==zhubao+1&&step>=0) { flag=1; if(jewel>maxjewels) maxjewels=jewel; return; } for(int i=0;i>u; youjige=u; dijige=1; while(u--) { memset(jewels,0,sizeof(jewels)); cin>>m>>n>>t>>zhubao; for(int i=0;i>jewels[i][2]; memset(distan,1000001,sizeof(distan)); memset(mark,0,sizeof(mark)); memset(visit,0,sizeof(visit)); for(int i=0;i>map[i][j]; if(map[i][j]=='@') { sx=i; sy=j; } if(map[i][j]=='<') { ex=i; ey=j; } if(map[i][j]>='A'&&map[i][j]<='J') { jewels[map[i][j]-'A'][0]=i; jewels[map[i][j]-'A'][1]=j; } } } cancollect=0; for(int i=0;i