hdu 1240 ( Asteroids! )

View Code
Problem : 1240 ( Asteroids! ) Judge Status : Accepted
又是一道常规BFS
#include
<iostream>
#include
<string>
#include
<queue>
using namespace std;
string map[10][10],ss,end;
int vis[10][10][10],dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
int n,ok,ans;
struct node
{
int x ,y,k,dis;
node(
int _k=0,int _x=0,int _y=0,int _dis=0):k(_k),x(_x),y(_y),dis(_dis){};
};
node s,e;
void BFS()
{
ans
=0;ok=0;
memset(vis,
0,sizeof(vis));
queue
<node> q;
q.push(s);
vis[s.k][s.x][s.y]
=1;
while(!q.empty())
{
node t
=q.front();
q.pop();
if(t.x==e.x&&t.y==e.y&&t.k==e.k) {ans=t.dis;ok=1;return;}
for(int m=0;m<6;m++)
{
int k=t.k+dir[m][0];
int x=t.x+dir[m][1];
int y=t.y+dir[m][2];
if(k>=0&&k<n&&x>=0&&x<n&&y>=0&&y<n&&map[k][x][y]!='X'&&!vis[k][x][y])
{
vis[k][x][y]
=1;
if(map[k][x][y]=='O')q.push(node(k,x,y,t.dis+1));

}
}


}
}
int main()
{
while(cin>>ss>>n)
{


for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
cin
>>map[k][i];
cin
>>s.y>>s.x>>s.k;
cin
>>e.y>>e.x>>e.k;
cin
>>ss;
BFS();
if(ok)cout<<n<<" "<<ans<<endl;
else cout<<"NO ROUTE"<<endl;

}
}


posted on 2011-03-25 18:01  4.5.6  阅读(213)  评论(0编辑  收藏  举报