zoukankan      html  css  js  c++  java
  • hdu

    http://acm.hdu.edu.cn/showproblem.php?pid=1240

    开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向。

    第一维代表在第几层。后两维代表行和列。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <queue>
     4 using namespace std;
     5 struct point
     6 {
     7     int x,y,z,step;
     8     bool operator < (const point a) const
     9     {
    10         return step>a.step;
    11     }
    12 };
    13 point t,e;
    14 int n;
    15 char maze[15][15][15];
    16 int used[15][15][15];
    17 int dir[6][3]={{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};
    18 
    19 void bfs()
    20 {
    21     memset(used,0,sizeof(used));
    22     priority_queue<point>que;
    23     que.push(t);
    24     used[t.z][t.x][t.y]=1;
    25     while(!que.empty())
    26     {
    27         point s=que.top(); que.pop();
    28       //  printf("%d %d %d %d
    ",s.z,s.x,s.y,s.step);
    29         if(s.x==e.x&&s.y==e.y&&s.z==e.z) {printf("%d %d
    ",n,s.step);return;}
    30         for(int i=0;i<6;i++)
    31         {
    32             t.x=s.x+dir[i][0],t.y=s.y+dir[i][1],t.z=s.z+dir[i][2];
    33             if(t.x>=0&&t.x<n&&t.y>=0&&t.y<n&&t.z>=0&&t.z<n&&maze[t.z][t.x][t.y]!='X'&&!used[t.z][t.x][t.y])
    34             {
    35                 t.step=s.step+1;
    36                 used[t.z][t.x][t.y]=1;
    37                 que.push(t);
    38             }
    39         }
    40     }
    41     printf("NO ROUTE
    ");
    42 }
    43 int main()
    44 {
    45    // freopen("a.txt","r",stdin);
    46     char s[10];
    47     while(~scanf("%s",s))
    48     {
    49         scanf("%d",&n);
    50         for(int i=0;i<n;i++)
    51             for(int j=0;j<n;j++)
    52             scanf("%s",maze[i][j]);
    53         scanf("%d%d%d",&t.y,&t.x,&t.z);
    54         t.step=0;
    55         scanf("%d%d%d",&e.y,&e.x,&e.z);
    56         scanf("%s",s);
    57         bfs();
    58     }
    59     return 0;
    60 }

     http://acm.hdu.edu.cn/showproblem.php?pid=1253

    这题用优先队列是超时的,普通队列可以过。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <queue>
     4 using namespace std;
     5 struct point
     6 {
     7     int x,y,z,time;
     8 }s,e;
     9 int maze[55][55][55];
    10 int dir[6][3]= {{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};
    11 
    12 int main()
    13 {
    14     //freopen("a.txt","r",stdin);
    15     int d,flag;
    16     int a,b,c,t;
    17     queue<point>que;
    18     scanf("%d",&d);
    19     while(d--)
    20     {
    21         scanf("%d%d%d%d",&a,&b,&c,&t);
    22         for(int i=0; i<a; i++)
    23             for(int j=0; j<b; j++)
    24                 for(int k=0; k<c; k++)
    25                 scanf("%d",&maze[i][j][k]);
    26         while(!que.empty()) que.pop();
    27         s.x=0,s.y=0,s.z=0,s.time=0;
    28         flag=0;
    29         que.push(s);
    30         maze[s.z][s.x][s.y]=1;
    31         while(!que.empty())
    32         {
    33             e=que.front();
    34             que.pop();
    35             //printf("%d %d %d %d
    ",e.z,e.x,e.y,e.time);
    36             if(e.z==a-1&&e.x==b-1&&e.y==c-1&&e.time<=t)
    37             {
    38                 printf("%d
    ",e.time);
    39                 flag=1;
    40                 break;
    41             }
    42             for(int i=0; i<6; i++)
    43             {
    44                 s.x=e.x+dir[i][0];
    45                 s.y=e.y+dir[i][1];
    46                 s.z=e.z+dir[i][2];
    47                 if(s.z>=0&&s.z<a&&s.x>=0&&s.x<b&&s.y>=0&&s.y<c&&maze[s.z][s.x][s.y]!=1)
    48                 {
    49                     s.time=e.time+1;
    50                     if(s.time<=t)
    51                     {
    52                         maze[s.z][s.x][s.y]=1;
    53                         que.push(s);
    54                     }
    55                 }
    56             }
    57         }
    58         if(!flag) printf("-1
    ");
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    python 求取代码运行时间
    Python中的继承、抽象基类和接口
    Python安装和环境配置,让你轻松入门学习Python!
    python入门python的基本语法
    没有对象?程序员的浪漫,对象攻略(1)
    python实现邮件循环自动发件
    docker查看全部容器命令
    python speech模块的使用方法
    开宗立派宣言
    多个 (li) 标签如何获取获取选中的里面的某个特定值
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4535906.html
Copyright © 2011-2022 走看看