• 1010


    题意:有一条A到B的路,而B到家的最短路比A到家的最短路要小,那么就可以从A到B,B到家,这可以算作一条路可走。求共有多少条这样的路从1点到家

    思路:先算出每个点到点2的最短路算出来,然后用深搜+标记,减少时间,算出共有多少条路可走到家。

    代码:

    #include<iostream>
    #include<queue>
    using namespace std;
    
    typedef struct n1
    {
        int  distens,flog;
    }node;
    node N[1005];
    int map[1005][1005],k;
    int direct[1005];
    void set(int n)
    {
        int i,j,m,n1,n2,d;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                map[i][j]=-1;
            }
             N[i].distens=10000000;N[i].flog=0;direct[i]=0;
        }
    
        scanf("%d",&m);
        while(m--)
        {
            scanf("%d%d%d",&n1,&n2,&d);
            if(map[n1][n2]!=0||map[n1][n2]>d)
            map[n1][n2]=map[n2][n1]=d;
        }
    }
    void spfa(int n)
    {
        queue<int> Q;
        int now;
        int i;
         N[2].distens=0;N[2].flog=1;
        Q.push(2);
        while(!Q.empty())
        {
            now=Q.front();
            Q.pop();
            N[now].flog=0;
            //if(q.x==1)break;
            for(i=1;i<=n;i++)
            if(map[now][i]!=-1)
            {
                if(N[i].distens>N[now].distens+map[now][i])
                {
                    N[i].distens=N[now].distens+map[now][i];
                    if(N[i].flog==0)
                    {
                        N[i].flog=1;
                        Q.push(i);
                    }
                }
            }
        }
    }
    int DFS(int now,int n)
    {
        int i;
        if(direct[now]>0)
        return direct[now];
        if(now==2)
        {
            return 1;
        }
        for(i=1;i<=n;i++)
        if(map[now][i]!=-1&&N[now].distens>N[i].distens)
        {
            direct[now]+=DFS(i,n);
        }
    
       return direct[now];
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)>0&&n)
        {
            set(n);
            spfa(n);
            k=DFS(1,n);
            printf("%d
    ",k);
        }
    }
  • 相关阅读:
    Java1.7的HashMap源码分析-面试必备技能
    Springboot集成Swagger2
    springsecurity简单学习
    Java8的新特性
    HttpClient
    Filter的使用
    Spring拦截器和SpringAop实现
    运维工程师打怪升级进阶之路 V2.0
    欢迎加入微信交流群交流
    赞!7000 字学习笔记,一天搞定 MySQL
  • 原文地址:https://www.cnblogs.com/Sikaozhe/p/5631499.html
Copyright © 2020-2023  润新知