标签:
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