比这篇新的文章:
Codee#9305
比这篇旧的文章: Codee#9303
作者: 郑诚, 点击42次, 评论(0), 收藏者(0), , 打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: 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 }
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条:( 我也来说两句)
代码
