zoukankan      html  css  js  c++  java
  • hdu 2102 A计划 队列

    刚开始错了好几次后来改了一下,居然又是内存超限。半个小时后才明白刚开始为什么错了和为什么会有内存超限,仅仅是赋值时将=写成 了==,好大的教训。刚开始没有开数组记录访问情况时,以为将.和#全部变成了*,居然忘记了将P也变成了墙,导致多花费了这么多时间。不要忘记今天的教训。

    /* ***********************************************
    Author        :xryz
    Email         :523689985@qq.com
    Created Time  :2015-4-10 10:48:21
    File Name     :A.CPP
    ************************************************ */
    
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    
    struct node
    {
        int x,y,c,t;
    }a,a0;
    
    int n,m,tme;
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    char s[2][15][15];
    
    int bfs()
    {
        int i;
        queue<node>q;
        a.c=0,a.x=1,a.y=1,a.t=0;
        q.push(a);
        while(!q.empty())
        {
            a0=q.front();
            q.pop();
            if(a0.t>tme) break;
            if(s[a0.c][a0.x][a0.y]=='P') return 1;
            for(i=0;i<4;i++)
            {
                a.x=a0.x+dx[i];
                a.y=a0.y+dy[i];
                a.t=a0.t+1;
                a.c=a0.c;
                if(a.x<1||a.y<1||a.x>n||a.y>m||s[a.c][a.x][a.y]=='*') continue;
                if(s[a.c][a.x][a.y]=='#') 
                {
                    s[a.c][a.x][a.y]='*';
                    if(a.c==0) a.c=1;
                        else a.c=0;
                }
                //if(s[a.c][a.x][a.y]=='P');
                q.push(a);
                if(s[a.c][a.x][a.y]!='P') s[a.c][a.x][a.y]='*';
                //不要将公主变成墙了
            }
        }
        return 0;
    }
    /* ***********************************************
    Author        :xryz
    Email         :523689985@qq.com
    Created Time  :2015-4-10 10:48:21
    File Name     :A.CPP
    ************************************************ */
    
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    
    struct node
    {
        int x,y,c,t;
    }a,a0;
    
    int n,m,tme;
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    char s[2][15][15];
    int vis[2][15][15];
    
    int bfs()
    {
        int i;
        queue<node>q;
        a.c=0,a.x=1,a.y=1,a.t=0;
        vis[0][1][1]=1;
        s[a.c][a.x][a.y]='*';
        q.push(a);
        while(!q.empty())
        {
            a0=q.front();
            q.pop();
            if(a0.t>tme) break;
            if(s[a0.c][a0.x][a0.y]=='P') return 1;
            for(i=0;i<4;i++)
            {
                a.x=a0.x+dx[i];
                a.y=a0.y+dy[i];
                a.c=a0.c;
                a.t=a0.t+1;
                if(a.x<1||a.y<1||a.x>n||a.y>m||s[a.c][a.x][a.y]=='*'||vis[a.c][a.x][a.y]) continue;
                if(s[a.c][a.x][a.y]=='#'&&vis[a.c][a.x][a.y]==0) {vis[a.c][a.x][a.y]=1;a.c=!a.c;}
                q.push(a);
                //printf("%d %d %d %c
    ",a.c,a.x,a.y,s[a.c][a.x][a.y]);
                vis[a.c][a.x][a.y]=1;
    
            }
        }
        return 0;
    }
    
    int main()
    {
        int i,j,cas,k;
        scanf("%d",&cas);
        while(cas--)
        {
            memset(s,0,sizeof(0));
            scanf("%d%d%d",&n,&m,&tme);
    
            for(k=0;k<=1;k++)
                for(i=1;i<=n;i++)
                    for(j=1;j<=m;j++)
                        cin>>s[k][i][j];
            memset(vis,0,sizeof(vis));  
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    if(s[0][i][j]=='#'&&s[1][i][j]=='*') s[0][i][j]='*';
                    if(s[1][i][j]=='#'&&s[0][i][j]=='*') s[1][i][j]='*';
                    if(s[1][i][j]=='#'&&s[0][i][j]=='#') s[1][i][j]=s[0][i][j]='*';
                }
    
            if(bfs()) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    org.springframework.transaction.CannotCreateTransactionException Could not open
    org.springframework.web.util.NestedServletException Handler processing failed; n
    SSM 后台封装的有值, 到前台打印的时候没有值
    javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException PK
    a 链接点击下载
    form图片上传遇到错误
    forever 启动nodejs
    nodejs 新建项目
    nodejs 安装
    nodejs 爬虫模板 map&array 数据模型
  • 原文地址:https://www.cnblogs.com/xryz/p/4848044.html
Copyright © 2011-2022 走看看