zoukankan      html  css  js  c++  java
  • POJ 3083 BFS+DFS 40行

    题意:给你一个迷宫。 先输出当左转优先的时候走的路程长度,再输出当右转优先时走的路程长度,最后输出从起点到终点的最短路程长度。

    嗯嗯 奴哥活跃气氛的题。随便写了写。。

    此题 知道了思路以后就是水题了。。。。
    再随便缩缩行也就不到40行 (网上的题解好多200+的。。)
    发现pair是个很坑的角儿。我一不小心就写挂了,重点是本机测试所有数据的输出结果都对。查不出来哪儿错的,,找了5min才找出来。

    pair < int,int> *p=&q.front();然后就p->first p->second
    改成
    pair < int,int> p=q.front() p.first p.second
    就AC了。(哎 讲语法课的时候浪过去了)
    p是取的q.front()的地址,然后它pop出去了,相当于取了个随时都有可能变的地址,这虽然能水过本机的测试,但评测机就水不过去了。。。

    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    int n,m,sx,sy,ex,ey,ansl,ansr,flag=0,Q,cases,vis[55][55];
    char a[55][55],lx[]={-1,0,1,0},ly[]={0,1,0,-1},rx[]={1,0,-1,0},ry[]={0,1,0,-1};
    inline void dfs(int x,int y,int f,int t,char *xx,char *yy){
        if(Q)return;
        if(a[x][y]=='E'){
            if(flag%2){ansr=t,flag++,Q=1;return;}
            else {ansl=t,flag++,Q=1;return;}
        }
        for(int i=0;i<=3;i++)
            if(a[x+xx[(f+i)%4]][y+yy[(f+i)%4]]=='.'||a[x+xx[(f+i)%4]][y+yy[(f+i)%4]]=='E')
                dfs(x+xx[(f+i)%4],y+yy[(f+i)%4],(f+i+3)%4,t+1,xx,yy);
    }
    int bfs(){
        queue<pair<int,int> >q;
        q.push(make_pair(sx,sy));
        while(1){
            pair<int,int>p=q.front();q.pop();
            if(a[p.first][p.second]=='E')return vis[p.first][p.second];
            for(int i=0;i<=3;i++)
            if(!vis[p.first+lx[i]][p.second+ly[i]]&&(a[p.first+lx[i]][p.second+ly[i]]=='.'||a[p.first+lx[i]][p.second+ly[i]]=='E'))
                vis[p.first+lx[i]][p.second+ly[i]]=vis[p.first][p.second]+1,q.push(make_pair(p.first+lx[i],p.second+ly[i]));
        }
    }
    int main(){
        scanf("%d",&cases);
        while(cases--){
            memset(vis,0,sizeof(vis));
            scanf("%d%d",&m,&n);
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++){
                    cin>>a[i][j];
                    if(a[i][j]=='S')sx=i,sy=j;
                }
            Q=0;dfs(sx,sy,0,1,lx,ly);
            Q=0;dfs(sx,sy,0,1,rx,ry);
            printf("%d %d %d
    ",ansl,ansr,bfs()+1);
        }
    }

    这里写图片描述

  • 相关阅读:
    一个简单的MVVM雏形
    sass学习笔记1
    col标签的相关实验
    背景半透明rgba最佳实践
    angular性能优化心得
    环视非捕获分组
    5月23日Google就宣布了Chrome 36 beta
    浏览器 user-agent 字符串的故事
    迷你MVVM框架 avalonjs 沉思录 第3节 动态模板
    迷你MVVM框架 avalonjs 1.3.1发布
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532455.html
Copyright © 2011-2022 走看看