zoukankan      html  css  js  c++  java
  • 水灾

    水灾(sliker.cpp/c/pas) 1000MS  64MB

    大雨应经下了几天雨,却还是没有停的样子。土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没。

    CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上有五种符号:“. * X D S”。其中“X”表示石头,水和人都不能从上面经过。“.”表示平原,CCY和洪水都可以经过。“*”表示洪水开始地方(可能有多个地方开始发生洪水)。“D”表示CCY的别墅。“S”表示CCY现在的位置。

    CCY每分钟可以向相邻位置移动,而洪水将会在CCY移动之后把相邻的没有的土地淹没(从已淹没的土地)。

    求CCY回到别墅的最少时间。如果聪哥回不了家,就很可能会被淹死,那么他就要膜拜黄金大神涨RP来呼叫直升飞机,所以输出“ORZ hzwer!!!”。

    输入文件 sliker.in

    输出文件 sliker.out

    Input

    3 3

    D.*

    .S.

    Output

    3

    Input

    3 3

    D.*

    ..S

    Output

    ORZ hzwer!!!

    Input

    3 6

    D…*.

    .X.X..

    ….S.

    Output

    6

     个人算法找出洪水开始时的节点,人在的位置,两个bfs,先进行人的,

    扩展当前能走到的步数(此时可扩展的节点有多个,如此节点被洪水淹没,则不进行扩展,注意判重),

    然后进行洪水的bfs,扩展洪水,(注意判重)

    此时扩展完当前步数可扩展的节点若 (人还可以移动则进行 bfs人)否则return,输出orz;

    这样可以ac

    由于种种原因代码丢失,懒得敲了;

    std:

    找出洪水开始的所有节点,写两个广搜,另一个搜索洪水走的路线bfs_1,一个搜索人走的路线 bfs_2。

    在bfs_2中,人每走一步之前,先bfs_1搜索洪水下一秒将要淹没点,然后搜索人走的路线。

    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct note
    {int x;int y;int step;};
    char map[1500][61][61];
    bool hsvisited[61][61];
    bool renvisited[61][61];
    int xgo[4]={1,-1,0,0};
    int ygo[4]={0,0,1,-1};
    int nowx;int nowy;int fx;int fy;int n;int m;
    queue<note>q;
    int main()
    {
        freopen("sliker.in","r",stdin);
        freopen("sliker.out","w",stdout); 
        cin>>n>>m;
        for(int i=1;i<=n;i++)
          for(int j=1;j<=m;j++)
          { 
              cin>>map[0][i][j];
              if(map[0][i][j]=='S')
              {
                  nowx=i;
                  nowy=j;
                  map[0][i][j]='.';
                  renvisited[i][j]=true;
              }
              if(map[0][i][j]=='D')
              {
                  fx=i;fy=j;
              }
          }
        for(int z=1;z<=1300;z++)    //离线处理 //jiduanqingkuangbukaolvle chutiren meinamewuliao
        {
            memset(hsvisited,0,sizeof(hsvisited)); 
            for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                
                if(map[z-1][i][j]=='*')
                {
                    for(int op=0;op<4;op++)
                    {
                        int xn=i+xgo[op];
                        int yn=j+ygo[op];
                        if(map[z-1][xn][yn]=='.')
                        {
                            hsvisited[xn][yn]=1;
                        }
                        
                    }
                }
                map[z][i][j]=map[z-1][i][j];
            }
            for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(hsvisited[i][j])
                  map[z][i][j]='*';
            }
        }
        note zz;
        zz.x=nowx;
        zz.y=nowy;
        zz.step=0;
        q.push(zz);
        while(!q.empty())
        {
            note op=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int xn=op.x+xgo[i];
                int yn=op.y+ygo[i];
                int s=op.step;
                if((map[s+1][xn][yn]=='.'||map[s+1][xn][yn]=='D')&&!renvisited[xn][yn])
                {
                    renvisited[xn][yn]=1;
                    note iq;
                    iq.x=xn;
                    iq.y=yn;
                    iq.step=s+1;
                    if(xn==fx&&yn==fy)
                    {
                        printf("%d",iq.step);
                        return 0;
                    }
                    q.push(iq);
                }
            }
            
        }
        printf("ORZ hzwer!!!");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    /*
    3 3
    D.*
    ...
    .S.
    */
    /*
    3 3
    D.*
    ...
    ..S
    */
    /*
    3 6
    D...*.
    .X.X..
    ....S.
    3 3
    D..
    ...
    ..S
    */
  • 相关阅读:
    6993: Dominoes(纯bfs)
    PHP学习笔记
    Android学习笔记
    大数据(笔记)
    第七周进度总结
    记账本NABCD分析
    第七周学习进度总结
    《构建之法》读书笔记(一)
    jdbc 连接数据库
    4月10日随笔
  • 原文地址:https://www.cnblogs.com/sssy/p/6883221.html
Copyright © 2011-2022 走看看