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);
        }
    }

    这里写图片描述

  • 相关阅读:
    Pathfinding 模板题 /// BFS oj21413
    poj2186-Popular Cows(强连通分支)
    求有向强连通分量 模板
    F. Relatively Prime Powers (求([2,n],内不是次方的数量)
    【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】
    Zoj 2314 Reactor Cooling(无源汇有上下界可行流)
    有上下界网络流模板
    有上下界网络流建模方法
    有上下界的网络流问题 的理解分析
    ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(约束第K短路)
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532455.html
Copyright © 2011-2022 走看看