比这篇新的文章: Codee#9305
比这篇旧的文章: Codee#9303

Codee#9304

语言: C++, 标签: 无  2010/02/09发布 1个月前更新
作者: 郑诚, 点击42次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
C++语言: Codee#9304
01 #include <iostream>
02 #include <queue>
03 using namespace std;
04 int k,a,b,c,t;
05 int g[51][51][51];
06 int dir[6][3]={-1,0,0,0,1,0,1,0,0,0,-1,0,0,0,1,0,0,-1};
07 int dist[51][51][51];  //离入口的距离
08 int bfs()
09 {
10     memset(dist,-1,sizeof dist);
11     queue<int>q;
12     dist[1][1][1]=0;
13     q.push(1);
14     q.push(1);
15     q.push(1);
16     while(!q.empty())
17     {
18         int x=q.front();q.pop();
19         int y=q.front();q.pop();
20         int z=q.front();q.pop();
21         if(x==a&&y==b&&z==c)      //到了出口就返回
22             return dist[x][y][z];
23         if(a+b+c-x-y-z>t) //剪枝
24             return -1;
25         for(int i=0;i<6;i++)
26         {
27             int x1=x+dir[i][0];
28             int y1=y+dir[i][1];
29             int z1=z+dir[i][2];
30             if(x1>=1&&x1<=a&&y1>=1&&y1<=b&&z1>=1&&z1<=c&&!g[x1][y1][z1]&&dist[x1][y1][z1]==-1)
31             {
32                 q.push(x1);
33                 q.push(y1);
34                 q.push(z1);
35                 dist[x1][y1][z1]=dist[x][y][z]+1;
36             }
37         }
38     }
39     return -1;
40 }
41 int main()
42 {
43     cin>>k;
44     while(k--)
45     {
46         cin>>a>>b>>c>>t;
47         for(int i=1;i<=a;i++)
48             for(int j=1;j<=b;j++)
49                 for(int l=1;l<=c;l++)
50                     scanf("%d",&g[i][j][l]);
51         if(a+b+c-3>t)  //剪枝
52         {
53             cout<<-1<<endl;
54             continue;
55         }
56         int time=bfs();
57         if(time<=t)
58             cout<<time<<endl;
59         else cout<<-1<<endl;
60     }
61 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论