zoukankan      html  css  js  c++  java
  • ECNU1104-BFS

    简单的BFS
    题意:多起点多终点

     1 /*
     2 简单的BFS
     3 题意:多起点多终点
     4 */
     5 #include<stdio.h>
     6 #include<string.h>
     7 #include<stdlib.h>
     8 #include<queue>
     9 #include<algorithm>
    10 using namespace std;
    11  
    12 const int maxn = 184;
    13 const int inf = 0x3f3f3f3f;
    14  
    15 int dis[ maxn ][ maxn ];
    16 char mat[ maxn ][ maxn ];
    17 const int dx[]={0,0,1,-1};
    18 const int dy[]={1,-1,0,0};
    19  
    20 queue<int>q;
    21  
    22 void init(){
    23     memset( dis,0x3f,sizeof( dis ) );
    24     while( !q.empty() )
    25         q.pop();
    26 } 
    27  
    28 bool in( int x,int y,int n,int m ){
    29     if( x>=0&&x<n && y>=0&&y<m ) return true;
    30     else return false;
    31 }
    32  
    33 void bfs( /*int x,int y,*/int n,int m ){
    34     /*int curx = x;
    35     int cury = y;
    36     int curt = 0;
    37     q.push( curx );
    38     q.push( cury );
    39     q.push( curt );*/
    40     while( !q.empty() ){
    41         int curx = q.front();q.pop();
    42         int cury = q.front();q.pop();
    43         int curt = q.front();q.pop();
    44         for( int i=0;i<4;i++ ){
    45             int nx = curx+dx[i];
    46             int ny = cury+dy[i];
    47             int nt = curt + 1;
    48             if( in( nx,ny,n,m ) && dis[ nx ][ ny ]>nt ){
    49                 dis[ nx ][ ny ] = nt;
    50                 q.push( nx );
    51                 q.push( ny );
    52                 q.push( nt );
    53             }
    54         }
    55     }
    56     return ;
    57 }
    58  
    59 int main(){
    60     int n,m;
    61     //freopen( "in.txt","r",stdin );
    62     while( scanf("%d%d",&n,&m)==2 ){
    63         init();
    64         for( int i=0;i<n;i++ ){
    65             scanf("%s",mat[i]);
    66             for( int j=0;j<m;j++ ){
    67                 if( mat[ i ][ j ]=='1' ){
    68                     dis[ i ][ j ] = 0;
    69                     q.push( i );
    70                     q.push( j );
    71                     q.push( 0 );
    72                 }
    73             }
    74         }
    75         bfs( n,m );
    76         for( int i=0;i<n;i++ ){
    77             for( int j=0;j<m;j++ ){
    78                 if( j==0 ) printf("%d",dis[ i ][ j ]);
    79                 else printf(" %d",dis[ i ][ j ]);
    80             }
    81             printf("
    ");
    82         }
    83     }
    84     return 0;
    85 }
    View Code

    keep moving...
  • 相关阅读:
    解析HTTP协议六种请求方法
    金蝶
    普元
    中间件
    [CTSC2008] 网络管理
    【Uva 10498】满意值
    【SPOJ839】最优标号
    bzoj2879 [Noi2012]美食节
    bzoj3144 [Hnoi2013]切糕
    bzoj3112 [Zjoi2013]防守战线
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3379235.html
Copyright © 2011-2022 走看看