zoukankan      html  css  js  c++  java
  • NYOJ999 师傅又被妖怪抓走了

    只记得当下的眼疼 , ok 各种数据也试了 , 就是 他娘的不对 , 我也是醉了 . 也是日了最野的狗

    附上日了哮天犬的代码 , 这个题 先放放, 一段时间后再试试 , 明天开始状态压缩吧 .为期两天

    今天早上 一眼就看出来了 代码的  漏洞 , 以后应该 自己想不出来的代码 让别人看看   ,   互相交换着看看  

    预处理 + 两重广搜 

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<math.h>
      4 #include<iostream>
      5 #include<algorithm>
      6 #include<queue>
      7 #include<vector>
      8 #include<set>
      9 #include<stack>
     10 #include<string>
     11 #include<sstream>
     12 #include<map>
     13 #include<cctype>
     14 using namespace std;
     15 int n,m,b[4][2]={0,-1,0,1,-1,0,1,0},minn,visited[105][105],vis[105][105];
     16 char a[105][105];
     17 struct monkey
     18 {
     19     int x,y,step;
     20 };
     21 queue<monkey>Q;
     22 void pretreatment(int x,int y,char b,char c)   //坐标 和 该名称  和  另一人名称
     23 {
     24     for(int i=x+1;i<m&&a[y][i]!='X'&&a[y][i]!=c;i++)
     25         a[y][i]=(a[y][i]=='d'?'O':b+32);
     26     for(int i=x-1;i>=0&&a[y][i]!='X'&&a[y][i]!=c;i--)
     27         a[y][i]=(a[y][i]=='d'?'O':b+32);
     28     for(int i=y+1;i<n&&a[i][x]!='X'&&a[i][x]!=c;i++)
     29         a[i][x]=(a[i][x]=='d'?'O':b+32);
     30     for(int i=y-1;i>=0&&a[i][x]!='X'&&a[i][x]!=c;i--)
     31         a[i][x]=(a[i][x]=='d'?'O':b+32);
     32 }
     33 queue<monkey>W;
     34 void BFSMORE(int x,int y,int step,char c)
     35 {
     36     monkey q={x,y,step};
     37     W.push(q);
     38     while(!W.empty())
     39     {
     40         monkey e=W.front();
     41         W.pop();
     42         for(int i=0;i<4;i++)
     43         {
     44             q.x=e.x+b[i][0],q.y=e.y+b[i][1];
     45             if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!vis[q.y][q.x])
     46             {
     47                 vis[q.y][q.x]=1;
     48                 q.step=e.step+1;
     49                 W.push(q);
     50                 if(a[q.y][q.x]==c||a[q.y][q.x]=='O')
     51                 {
     52                     minn=minn>q.step?q.step:minn;
     53                     while(!W.empty())
     54                         W.pop();
     55                     break;
     56                 }
     57             }
     58         }
     59     }
     60 }
     61 void BFS(int x,int y)
     62 {
     63     monkey q={x,y,0};
     64     if(a[y][x]=='O')
     65     {
     66         minn=0;
     67         return ;
     68     }
     69     if(a[y][x]=='d')
     70     {
     71         memset(vis,0,sizeof(vis));
     72         BFSMORE(x,y,0,'e');
     73     }
     74     if(a[y][x]=='e')
     75     {
     76         memset(vis,0,sizeof(vis));
     77         BFSMORE(x,y,0,'d');
     78     }
     79     Q.push(q);
     80     while(!Q.empty())
     81     {
     82         monkey e=Q.front();
     83         Q.pop();
     84         for(int i=0;i<4;i++)
     85         {
     86             q.x=e.x+b[i][0],q.y=e.y+b[i][1];
     87             if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!visited[q.y][q.x])
     88             {
     89                 q.step=e.step+1;
     90                 Q.push(q);
     91                 visited[q.y][q.x]=1;
     92                 if(a[q.y][q.x]=='O')
     93                 {
     94                     minn=minn>q.step?q.step:minn;
     95                 }
     96                 if(a[q.y][q.x]=='d')
     97                 {
     98                     memset(vis,0,sizeof(vis));
     99                     BFSMORE(q.x,q.y,q.step,'e');
    100                 }
    101                 if(a[q.y][q.x]=='e')
    102                 {
    103                     memset(vis,0,sizeof(vis));
    104                     BFSMORE(q.x,q.y,q.step,'d');
    105                 }
    106             }
    107         }
    108     }
    109 }
    110 int main()
    111 {
    112     int sx,sy,dx,dy,ex,ey,t,count1=0;
    113     while(scanf("%d%d%d",&n,&m,&t)!=EOF)
    114     {
    115         minn=t+1;
    116         for(int i=0;i<n;i++)
    117         {
    118             for(int j=0;j<m;j++)
    119             {
    120                 scanf(" %c",&a[i][j]);
    121                 if(a[i][j]=='S')
    122                 {
    123                     sx=j;
    124                     sy=i;
    125                 }
    126                 if(a[i][j]=='D')
    127                 {
    128                     dx=j;
    129                     dy=i;
    130                 }
    131                 if(a[i][j]=='E')
    132                 {
    133                     ex=j;
    134                     ey=i;
    135                 }
    136             }
    137         }
    138         pretreatment(dx,dy,'D','E');
    139         pretreatment(ex,ey,'E','D');
    140         memset(visited,0,sizeof(visited));
    141         visited[sy][sx]=1;
    142         BFS(sx,sy);
    143         printf("Case %d:
    ",++count1);
    144         if(minn<=t)
    145             printf("%d
    ",minn);
    146         else
    147             printf("-1
    ");
    148     }
    149     return 0;
    150 }
  • 相关阅读:
    冒泡排序算法。
    深入浅出UML类图(一)转
    树形结构的处理—组合模式(五)
    树形结构的处理—组合模式(四)
    树形结构的处理—组合模式(三)
    树形结构的处理—组合模式(二)
    树形结构的处理—组合模式(一)
    如何成为优秀的软件模型设计者? 转
    软件架构与架构师 转
    深入浅出外观模式(三)
  • 原文地址:https://www.cnblogs.com/A-FM/p/5348326.html
Copyright © 2011-2022 走看看