bfs 很简单的搜索,哪错了呢?
http://acm.hdu.
程序代码:#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int MAXN=15;
int n,m;
char map[2][MAXN][MAXN];
int dir[][2]={{0,1},{0,-1},{1,0},{-1,0}};
int vis[2][MAXN][MAXN];
struct Node{
int x,y,step;
Node(){};
Node(int a,int b,int c):x(a),y(b),step(c){};
}que[MAXN*MAXN*MAXN];
int bfs()
{
int h,t;
memset(vis,0,sizeof(vis));
vis[0][0][0]=1;
que[h=t=0]=Node(0,0,0);
while(h<=t){
int x=que[h].x,y=que[h].y,z=0,step=que[h++].step;
for(int i=0;i<4;++i){
int xx=x+dir[i][0],yy=y+dir[i][1];
if(xx<0 || xx>=n || yy<0 || yy>=m) continue;
if(map[z][xx][yy]=='#'){
z^=1;
if(map[z][xx][yy]=='#'
|| map[z][xx][yy]=='*' || vis[z][xx][yy]) continue;
step++;
}
if(map[z][xx][yy]=='*' || vis[z][xx][yy]) continue;
if(map[z][xx][yy]=='P') return step+1;
vis[z][xx][yy]=1;
que[++t]=Node(xx,yy,step+1);
}
}
return -1;
}
int main()
{
int c,t;
cin>>c;
while(c--){
cin>>n>>m>>t;
for(int i=0;i<2;++i)
for(int j=0;j<n;++j) cin>>map[i][j];
if(t==bfs()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}http://acm.hdu.
程序代码:#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int MAXN=15;
int n,m;
char map[2][MAXN][MAXN];
int dir[][2]={{0,1},{0,-1},{1,0},{-1,0}};
int vis[2][MAXN][MAXN];
struct Node{
int x,y,z,step;
Node(){};
Node(int a,int b,int c,int d):x(a),y(b),z(c),step(d){};
}que[MAXN*MAXN*MAXN];
int bfs()
{
int h,t;
memset(vis,0,sizeof(vis));
vis[0][0][0]=1;
que[h=t=0]=Node(0,0,0,0);
while(h<=t){
int x=que[h].x,y=que[h].y,z=que[h].z,step=que[h++].step;
for(int i=0;i<4;++i){
int xx=x+dir[i][0],yy=y+dir[i][1];
if(xx<0 || xx>=n || yy<0 || yy>=m) continue;
if(map[z][xx][yy]=='#'){
z^=1;
if(map[z][xx][yy]=='#'
|| map[z][xx][yy]=='*' || vis[z][xx][yy]) continue;
step++;
}
if(map[z][xx][yy]=='*' || vis[z][xx][yy]) continue;
if(map[z][xx][yy]=='P') return step+1;
vis[z][xx][yy]=1;
que[++t]=Node(xx,yy,z,step+1);
}
}
return -1;
}
int main()
{
int c,t;
cin>>c;
while(c--){
cin>>n>>m>>t;
for(int i=0;i<2;++i)
for(int j=0;j<n;++j) scanf("%s",map[i][j]);
if(t==bfs()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}不好意思刚才贴错了。。不过这个还是WA。。。
[ 本帖最后由 cb_1212 于 2012-5-16 23:50 编辑 ]






