zoukankan      html  css  js  c++  java
  • 1072. Routing 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1072

    简单 spfa

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<vector>
    #include<set>
    #include<map>
    #include<string>
    #include<queue>
    #include<stack>
    #include <iomanip>
    using namespace std;
    #define LL long long
    const int INF=0x3f3f3f3f;
    //priority_queue<int,vector<int>,greater<int> >qt;
    const int N=105;
    int head[N],I;
    struct node
    {
        int j,next;
    }side[N*N];
    struct I
    {
        int m;
        int a[7][4],b[7][4];
    }mem[N];
    vector<int>road;
    void add(int i,int j)
    {
        side[I].j=j;
        side[I].next=head[i];
        head[i]=I++;
    }
    bool equals(int I,int J)
    {
        for(int i=0;i<mem[I].m;++i)
        for(int j=0;j<mem[J].m;++j)
        {
            int l;
            for(l=0;l<4;++l)
            {
                if((mem[I].a[i][l]&mem[I].b[i][l])==(mem[J].a[j][l]&mem[J].b[j][l]))
                continue;
                else
                break;
            }
            if(l==4)
            return true;
        }
        return false;
    }
    void spfa(int s,int nd,int n)
    {
        int dist[N];
        bool in[N];
        int f[N];
        road.clear();
        queue<int>qt;
        memset(in,false,sizeof(in));
        memset(dist,-1,sizeof(dist));
        dist[nd]=0;
        in[nd]=true;
        qt.push(nd);
        while(!qt.empty())
        {
            int x=qt.front();qt.pop();
            in[x]=false;
            for(int t=head[x];t!=-1;t=side[t].next)
            {
                int j=side[t].j;
                if(dist[j]==-1||dist[j]>dist[x]+1)
                {
                    dist[j]=dist[x]+1;
                    f[j]=x;
                    if(!in[j])
                    {
                        in[j]=true;
                        qt.push(j);
                    }
                }
            }
        }
        if(dist[s]==-1)
        return ;
        int k=s;
        while(k!=nd)
        {
            road.push_back(k);
            k=f[k];
        }
        road.push_back(k);
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        int n;
        while(cin>>n)
        {
            memset(head,-1,sizeof(head));
            I=0;
            for(int i=1;i<=n;++i)
            {
                cin>>mem[i].m;
                char c;
                for(int j=0;j<mem[i].m;++j)
                {
                    cin>>mem[i].a[j][0]>>c>>mem[i].a[j][1]>>c>>mem[i].a[j][2]>>c>>mem[i].a[j][3];
                    cin>>mem[i].b[j][0]>>c>>mem[i].b[j][1]>>c>>mem[i].b[j][2]>>c>>mem[i].b[j][3];
                }
                for(int l=1;l<i;++l)
                {
                    if(equals(i,l))
                    {add(i,l),add(l,i);}
                }
            }
            int s,nd;
            cin>>s>>nd;
            spfa(s,nd,n);
            if(road.size()==0)
            cout<<"No"<<endl;
            else
            {
                cout<<"Yes"<<endl;
                for(unsigned int i=0;i<road.size();++i)
                {
                    cout<<road[i]<<" ";
                }
                cout<<endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    第11组(73) 需求分析报告
    第11组(73)团队展示
    结对编程作业
    第02组 Alpha冲刺 总结
    第02组 Alpha冲刺 (6/6)
    第02组 Alpha冲刺 (5/6)
    第02组 Alpha冲刺 (4/6)
    第02组 Alpha冲刺 (3/6)
    第02组 Alpha冲刺 (2/6)
    第02组 Alpha冲刺 (1/6)
  • 原文地址:https://www.cnblogs.com/liulangye/p/2795641.html
Copyright © 2011-2022 走看看