zoukankan      html  css  js  c++  java
  • POJ2225+BFS

    简单的BFS   1a

     1 /*
     2 从起点到终点
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<queue>
     9 #include<iostream>
    10 using namespace std;
    11 
    12 const int maxn = 12;
    13 const int Max = 99999999;
    14 char mat[ maxn ][ maxn ][ maxn ];
    15 int vis[ maxn ][ maxn ][ maxn ];
    16 const int dx[]={0,0,1,-1,0,0};
    17 const int dy[]={1,-1,0,0,0,0};
    18 const int dz[]={0,0,0,0,1,-1};
    19 struct node{
    20     int x,y,z,ti;
    21 }my_start,my_end;
    22 
    23 bool ok( node cur ){
    24     if( mat[ cur.z ][ cur.x ][ cur.y ]=='X'||vis[ cur.z ][ cur.x ][ cur.y ]==1 )
    25         return false;
    26     else 
    27         return true;
    28 }
    29 
    30 bool inside( node cur,int n ){
    31     if( cur.x>=0&&cur.x<n&&cur.y>=0&&cur.y<n&&cur.z>=0&&cur.z<n )
    32         return true;
    33     else
    34         return false;
    35 }
    36 
    37 int bfs( int n ){
    38     if( my_start.x==my_end.x&&my_start.y==my_end.y&&my_start.z==my_end.z )
    39         return 0;
    40     queue<node>q;
    41     node cur,nxt;
    42     int ans = Max;
    43     cur.x = my_start.x;
    44     cur.y = my_start.y;
    45     cur.z = my_start.z;
    46     cur.ti = 0;
    47     vis[ cur.z ][ cur.x ][ cur.y ] = 1;
    48     q.push( cur );
    49     while( !q.empty() ){
    50         cur = q.front();
    51         q.pop();
    52         if( cur.x==my_end.x&&cur.y==my_end.y&&cur.z==my_end.z ){
    53             ans = min( ans,cur.ti );
    54         }
    55         for( int i=0;i<6;i++ ){
    56             nxt = cur;
    57             nxt.ti ++;
    58             nxt.x += dx[i];
    59             nxt.y += dy[i];
    60             nxt.z += dz[i];
    61             if( inside( nxt,n )==false||ok( nxt )==false ) continue;
    62             vis[ nxt.z ][ nxt.x ][ nxt.y ] = 1;
    63             q.push( nxt );
    64         }
    65     }
    66 
    67     if( ans>=Max ) return -1;
    68     else return ans;
    69 }
    70 
    71 int main(){
    72     int N;
    73     char str[ maxn ];
    74     while( scanf("%s%d",str,&N)!=EOF ){
    75         memset( vis,0,sizeof( vis ) );
    76         for( int i=0;i<N;i++ ){
    77             for( int j=0;j<N;j++ ){
    78                 scanf("%s",mat[ i ][ j ]);
    79             }
    80         }
    81         //mat[i][j][k] 层 行 列
    82         scanf("%d%d%d",&my_start.y,&my_start.x,&my_start.z);
    83         scanf("%d%d%d",&my_end.y,&my_end.x,&my_end.z);
    84         //列 行 层
    85         scanf("%s",str);
    86         int ans = bfs( N );
    87         if( ans==-1 ) printf("NO ROUTE
    ");
    88         else printf("%d %d
    ",N,ans);
    89     }
    90     return 0;
    91 }
    View Code
    keep moving...
  • 相关阅读:
    MVC知识点01
    MVC知识点02
    ADO.NET基础01
    WinForm,MVC知识点
    C#基础01
    28、对多次使用的RDD进行持久化或Checkpoint
    27、优化数据结构
    26、高性能序列化类库
    25、诊断内存的消耗
    24、Checkpoint原理剖析
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3194377.html
Copyright © 2011-2022 走看看