• 01迷宫


    一定是没有拜初音未来,竟然卡了我半个小时

    MIKUMIKUMIKUMIKU

    题目:https://www.luogu.org/problemnew/show/P1141

    很简单的BFS,但是有三个点不优化就TLE!!!!

    真的很讨厌的诶

    以下是代码,希望帮助到你

     1 //被这题卡了半个小时,数组开小了QWQ 
     2 //怎么说,很有趣的题 
     3 
     4 #include<iostream>
     5 #include<queue>
     6 #include<bits/stdc++.h>
     7 
     8 using namespace std;
     9 
    10 queue <int> q;
    11 queue <int> q1;
    12 long int mapp[10100][10100],vis[10050][10005];//不言而喻,存图与记录拜访 
    13 int step=0;//当前步数 
    14 int stepp[100050];//累计每一次步数 
    15 int x1[4]={1,0,0,-1};
    16 int y5[4]={0,1,-1,0};
    17      int n,m;
    18      char c;
    19      bool boool;
    20  int main()
    21  {
    22 
    23      cin>>n>>m;
    24      for(int i=1;i<=n;++i){
    25              for(int j=1;j<=n;++j){
    26                  cin>>c;//在这读图真可怕,gets,getchar死活读不了 
    27                  if(c=='1')
    28                  mapp[i][j]=1;
    29                  else
    30                  mapp[i][j]=0;
    31              }
    32          }//下面是每一次的搜索 
    33          for(int k=1;k<=m;++k){
    34          int x,y;
    35          cin>>x>>y;
    36          vis[x][y]=k;
    37          step=1;
    38          q.push(x);
    39          q1.push(y);
    40          //初始化中 
    41          while(q.size()){
    42              if(boool)
    43              break;//蒟蒻的弹出方法,因为下面还有个for,只能再判一遍 
    44              int u,v;
    45              u=q.front(); q.pop();
    46              v=q1.front(); q1.pop();//读取队列 
    47              for(int i=0;i<4;++i){
    48                  int u1=u+x1[i];
    49                  int v1=v+y5[i];
    50                  if(mapp[u][v]+mapp[u1][v1]==1&& vis[u1][v1]!=k&&u1>=1&&v1>=1&&u1<=n&&v1<=n)
    51                  {//在这里,因为是从零走到一或从一走到零,那么这两步的和必然为一
    52                  //边界条件判定很明显 
    53                      if(vis[u1][v1]>=1)//如果这里已经被拜访过 
    54                      {//那么走的最多方位定然和上一次一样 
    55                          step=stepp[vis[u1][v1]];//记录中,vis存了是在第几次被拜访
    56                          //而stepp则是第几次的步数 
    57                          boool=1;
    58                          //两个循环,只能这么跳了 
    59                          break;
    60                      }
    61                      else
    62                      {
    63                      vis[u1][v1]=k;
    64                      step++;
    65                      q.push(u1);
    66                      q1.push(v1);
    67                      //压入队列与记录步数与记录拜访 
    68                      }
    69                  }
    70              }
    71               
    72          }
    73          //输出 
    74          cout<<step<<endl;
    75          stepp[k]=step;//第k次的答案 
    76          boool=0;//初始化 
    77          
    78      }
    79      return 0;
    80  }

    好了,就是这样。

    何不祝我和初音未来在一起

  • 相关阅读:
    关于AJAX与form表单提交数据的格式
    MongoDB
    Redis
    在django中使用django_debug_toolbar进行日志记录
    python第三方库,你要的这里都有
    Django之用户认证auth模块
    Django中常用命令
    form表单钩子,局部钩子和全局钩子
    当我开始爱自己
    FOR YOU
  • 原文地址:https://www.cnblogs.com/For-Miku/p/10467430.html
Copyright © 2020-2023  润新知