标签:
Description
Input
Output
Sample Input
Sample Output
#include<cstdio> #include<cstring> #include<queue> using namespace std; struct p { int x,y,t,su; int s1[90],s2[90]; }; int n,m,sx,sy,ans,time; char map[10][10]; int v[10][10][2]; int yi[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; void dfs(int k) { queue<p>q; p f,r; int vis=-1,i,j; if (k>ans) return ; f.x=sx; f.y=sy; f.t=0; f.su=0; memset(v,0,sizeof(v)); while (!q.empty()) q.pop(); v[sx][sy][0]=1; q.push(f); while (!q.empty()) { r=q.front(); q.pop(); if (r.t>time) continue; if (map[r.x][r.y]==‘E‘&&r.su) {vis=r.t;break;} f.t=r.t+1; f.su=r.su; for (i=0;i<4;i++) { f.x=r.x+yi[i][0]; f.y=r.y+yi[i][1]; if (f.x>=0&&f.x<n&&f.y>=0&&f.y<m&&map[f.x][f.y]!=‘#‘) { if (map[f.x][f.y]==‘J‘) f.su=1; else f.su=r.su; if (v[f.x][f.y][f.su]) continue; v[f.x][f.y][f.su]=1; for (j=1;j<=r.t;j++) { f.s1[j]=r.s1[j]; f.s2[j]=r.s2[j]; } f.s1[f.t]=f.x; f.s2[f.t]=f.y; q.push(f); } } } if (vis==-1) { if (ans>k) ans=k; return ; } for (i=1;i<=r.t;i++) { char c=map[r.s1[i]][r.s2[i]]; if (c==‘S‘||c==‘E‘) continue; map[r.s1[i]][r.s2[i]]=‘#‘; dfs(k+1); map[r.s1[i]][r.s2[i]]=c; } } int main() { int c,i,j; scanf("%d",&c); while (c--) { scanf("%d%d%d",&n,&m,&time); for(i=0;i<n;i++) for(j=0;j<m;j++) { scanf(" %c",&map[i][j]); if (map[i][j]==‘S‘) {sx=i;sy=j;} } ans=4; dfs(0); printf("%d\n",ans); } return 0; }
HDU 1983 Kaitou Kid - The Phantom Thief (2) bfs and dfs
标签:
原文地址:http://www.cnblogs.com/pblr/p/4713403.html