zoukankan      html  css  js  c++  java
  • PAT1003 Emergency

     解题思路:

      DFS,从起点开始遍历所有能到达终点的路,找出最短路径和最大的救援队伍数

    #include <bits/stdc++.h>
    const int  INF = 0x7fffffff;
    using namespace std;
    int n,m,c1,c2;
    int head[2000],tot;
    struct node
    {
        int to, nxt, w ;
    } e[2000];
    void add (int x,int y,int z)
    {
        e[tot].to = y;
        e[tot].w = z;
        e[tot].nxt = head[x];
        head[x] = tot++;
    }
    void add_edge(int x,int y,int z){
        add(x,y,z);
        add(y,x,z);
    }
    int  a[1000];
    int visit[1000];
    int max_num=0,min_dis=INF,way=0;
    void dfs(int st,int dis,int num)
    {
        if(st==c2)
        {
            if(dis<min_dis) //小于最短路程的情况
            {
                min_dis=dis;
                way=1;
                max_num=num;
            }
            else if (dis==min_dis)  //等于最短路程的情况
            {
                way++;
                max_num = max(max_num,num);
            }
            return ;
        }
        visit[st]=1;
        for(int i=head[st];~i;i=e[i].nxt){
            int v = e[i].to;
            if(!visit[v]&&e[i].w){
                dfs(v,dis+e[i].w,num+a[v]);
            }
    
        }
        visit[st]=0;
    }
    int main()
    {
        memset(head,-1,sizeof(head));
        scanf("%d%d%d%d",&n,&m,&c1,&c2);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=0; i<m; i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            add_edge(x,y,z);
        }
        dfs(c1,0,a[c1]);
        printf("%d %d
    ",way,max_num);
        return 0;
    }
  • 相关阅读:
    mysql、mongodb、redis区别
    Redis面试题
    【开发提效】开发提效技巧
    【代码规范】16条军规
    mysql数据库连接字符串
    mysql数据库连接字符串
    好用的api接口
    node + express + vue
    跨源资源共享(CORS)
    fehelper
  • 原文地址:https://www.cnblogs.com/ljxdtc666/p/14124703.html
Copyright © 2011-2022 走看看