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

    模拟BFS搜索

    对于一个将要爆炸的点,可能同时由多个点引起。

     1 /*
     2 模拟搜索过程
     3 */
     4 #include<stdio.h>
     5 #include<stdlib.h>
     6 #include<string.h>
     7 #include<algorithm>
     8 #include<queue>
     9 using namespace std;
    10 const int maxn = 8;
    11 int mat[ maxn ][ maxn ];
    12 int mytime[ maxn ][ maxn ];
    13 const int dx[] = {0,0,-1,1};
    14 const int dy[] = {1,-1,0,0};
    15 struct node{
    16     int x,y,ti,flag;
    17 };
    18 void solve( int x,int y ){
    19     queue<node>q;
    20     node cur,nxt;
    21     cur.x = x;
    22     cur.y = y;
    23     cur.ti = 0;
    24     cur.flag = -1;
    25     mytime[x][y] = 0;
    26     mat[cur.x][cur.y]++;
    27     q.push( cur );
    28     
    29     while( !q.empty() ){
    30         cur=q.front();
    31         q.pop();
    32         if( cur.flag==-1 )
    33             mat[cur.x][cur.y] = 0;
    34         for( int i=0;i<4;i++ ){
    35             nxt.x = cur.x+dx[i];
    36             nxt.y = cur.y+dy[i];
    37             nxt.ti = cur.ti+1;
    38             if( cur.flag!=-1&&cur.flag!=i ) continue;
    39             if( nxt.x<1||nxt.x>6||nxt.y<1||nxt.y>6 ) continue;
    40             if( mat[nxt.x][nxt.y]==0 ){
    41                 nxt.flag = i;
    42                 q.push( nxt );
    43             }
    44             else if( mat[nxt.x][nxt.y]>=1&&mat[nxt.x][nxt.y]<=3 ){
    45                 mat[nxt.x][nxt.y]++;
    46             }
    47             else if( mat[nxt.x][nxt.y]==4 ){
    48                 nxt.flag = -1;
    49                 q.push( nxt );
    50                 mat[ nxt.x ][ nxt.y ]++;
    51                 mytime[nxt.x][nxt.y] = nxt.ti;
    52             }
    53             else if( mat[nxt.x][nxt.y]>4 ){
    54                 if( nxt.ti<=mytime[nxt.x][nxt.y] ){
    55                     mat[nxt.x][nxt.y]++;
    56                 }
    57                 else {
    58                     nxt.flag = i;
    59                     q.push( nxt );
    60                 }
    61             }
    62         }
    63     }
    64     return ;
    65 }
    66 
    67 int main(){
    68     while( scanf("%d",&mat[ 1 ][ 1 ])==1 ){
    69         for( int i=2;i<=6;i++ )
    70             scanf("%d",&mat[ 1 ][ i ]);
    71         for( int i=2;i<=6;i++ )
    72             for( int j=1;j<=6;j++ )
    73                 scanf("%d",&mat[ i ][ j ]);
    74         int m;
    75         int x,y;
    76         scanf("%d",&m);
    77         while( m-- ){
    78             scanf("%d%d",&x,&y);
    79             if( mat[ x ][ y ]<=3 ){
    80                 mat[ x ][ y ] ++;
    81                 continue;
    82             }
    83             memset( mytime,-1,sizeof( mytime ) );
    84             solve( x,y );
    85         }
    86         for( int i=1;i<=6;i++ ){
    87             for( int j=1;j<=6;j++ ){
    88                 if( j==1 ) printf("%d",mat[ i ][ j ]);
    89                 else printf(" %d",mat[ i ][ j ]);
    90             }
    91             printf("
    ");
    92         }
    93         printf("
    ");
    94     }
    95     return 0;
    96 }
    View Code
    keep moving...
  • 相关阅读:
    推荐:俞敏洪的一分钟励志演讲
    信息系统开发平台OpenExpressApp - 内置支持的列表编辑方式
    WPF - 资源收集
    开源 - 开源协议
    信息系统开发平台OpenExpressApp - 总体架构的由来
    WPF - DataGrid 相关收集
    报表引擎 -架构描述
    推荐:图标编辑器
    Scrum之 回顾会议
    从买房来看软件有哪几个主要关注点
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3188064.html
Copyright © 2011-2022 走看看