zoukankan      html  css  js  c++  java
  • POJ3984 输出路径

        和ACWING 844基本一样。但是这里要输出路径    

        我的做法是,pair一个ing[x][y],ing[x][y].first,ing[x][y].second记录x,y的前一个点。因为是逆序,所以又存进一个结构体里,再逆序输出,才变成正序了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    typedef pair<int,int>P; //!!!
    const int maxn = 105;
    P ing[maxn][maxn];
    int n,m;
    int g[maxn][maxn];
    int d[maxn][maxn];    //每个点到起点的距离 //没有走过 
    int dx[]={0,0,-1,1};
    int dy[]={1,-1,0,0};
    struct node
    {
        int x,y;
    }st[maxn];
    void bfs()
    {
        queue<P>q;
        memset(d,-1,sizeof(d));
        d[0][0]=0;
        q.push({0,0});
        while(!q.empty())
        {
            P t = q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int x=dx[i]+t.first;
                int y=dy[i]+t.second;
                if(x>=0&&y>=0&&x<5&&y<5&&g[x][y]==0&&d[x][y]==-1)
                {
                    d[x][y]=d[t.first][t.second]+1;
                    ing[x][y].first=t.first;
                    ing[x][y].second=t.second;
                    q.push({x,y});
                }
            }
        }
        return ;
    }
    int main()
    {
        //cin>>n>>m;
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                cin>>g[i][j];
        bfs();
        int x=4,y=4;
        int tot=0;
        while(!(x==0&&y==0))
        {
            st[tot].x=x;
            st[tot].y=y;
            tot++;
            int tx=x,ty=y;
            x=ing[tx][ty].first;
            y=ing[tx][ty].second;
        }
        cout<<"(0, 0)"<<endl;
        for(int i=tot-1;i>=0;i--)
            printf("(%d, %d)
    ",st[i].x,st[i].y);
        return 0;
    }
  • 相关阅读:
    净化-湿式除尘器:湿式除尘器
    净化-袋式除尘器:袋式除尘器
    LOCK
    locale
    loadkeys
    LOAD
    ln -在文件之间建立连接
    lmhosts
    listen
    listalias
  • 原文地址:https://www.cnblogs.com/liyexin/p/12680840.html
Copyright © 2011-2022 走看看