题目链接:hdu1253 代码:bfs 模板: //使用STL中的队列 void BFS( ) { 首结点入队列Q; while ( ! Q.empty() ) //队列不空 { temp=Q.front(); if ( 到达目的状态 ) { 输出结果; break; } Q.pop( ); for (i=1; i<=m; i++) //扩展结点temp的m种可能 if (可以扩展) { 处理每种可能情况; 扩展出结点入队列; } } } 代码: #include<iostream> #include<queue> using namespace std; int map[52][52][52]; int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; int K,A,B,C,T; struct node { int x,y,z,t; node(int a,int b,int c,int d) {x=a;y=b;z=c;t=d;} }; void bfs() { queue<node> q; node tmp(0,0,0,0); q.push(tmp); while(!q.empty()) { tmp=q.front(); int qx,qy,qz; if(tmp.x==A-1&&tmp.y==B-1&&tmp.z==C-1) { if(tmp.t<=T)printf("%d/n",tmp.t); else printf("-1/n"); return; } q.pop(); for(int i=0;i<6;i++) { qx=tmp.x+dir[i][0]; qy=tmp.y+dir[i][1]; qz=tmp.z+dir[i][2]; if(qx>=0&&qx<A&&qy>=0&&qy<B&&qz>=0&&qz<C) if(map[qx][qy][qz]==0) { map[qx][qy][qz]=1; q.push(node(qx,qy,qz,tmp.t+1)); } } } printf("-1/n"); } int main() { cin>>K; while(K--) { scanf("%d%d%d%d",&A,&B,&C,&T); for(int i=0;i<A;i++) for(int j=0;j<B;j++) for(int k=0;k<C;k++) scanf("%d",&map[i][j][k]); if(map[A-1][B-1][C-1]){printf("-1/n");continue;} bfs(); } return 0; }