PAT: 1003 Emergency

 

查看题目:1003 Emergency

声明:程序源码并非完美,提交后结果为“部分正确”。因博主看到这个题目网上的答案较少,所以将未完善的代码发出来供大家参考!

本程序采用深度优先搜索算法(DFS),由于递归的调用方式,占用内存过大导致程序提交错误。

#include "pch.h"
#include <iostream>
using namespace std;

const int MAXV = 50;
const int INF = 99999;

struct Graph {
    int Vex[MAXV];
    int arcs[MAXV][MAXV];
    int vexnum, arcsnum;
}G;

bool visited[MAXV];
int path[MAXV];
int length = 0;
int min_length = INF;
int num = 0;
int team = 0;
int maxteam = 0;

void DFS(Graph G, int c1, int c2) {
    team += G.Vex[c1];
    if (c1 == c2) {//走到终点了
        //length += G.arcs[c1][c2];
        if (length < min_length) {
            num = 1;
            min_length = length;
            maxteam = team;
        }
        else if (length == min_length) {
            num++;
            if (team > maxteam)maxteam = team;
        }
        return;
    }
    visited[c1] = true;
    
    for (int i = 0; i < G.vexnum; i++) {
        if (G.arcs[c1][i] != INF && visited[i] == false) {//访问v的邻接点
            length += G.arcs[c1][i];
            //team += G.Vex[i];
            DFS(G,i,c2);
            length -= G.arcs[c1][i];
            //team -= G.Vex[i];
        }
    }
    team -= G.Vex[c1];
    return;
}

int main() {
    for (int i = 0; i < MAXV; i++) {
        for (int j = 0; j < MAXV; j++) {
            G.arcs[i][j] = INF;
        }
    }
    int c1, c2;
    cin >> G.vexnum >> G.arcsnum >> c1 >> c2;
    
    for (int i = 0; i < G.vexnum; i++) {//城市救援队数量
        cin >> G.Vex[i];
    }
    int temp1, temp2, temp3;
    for (int i = 0; i < G.arcsnum; i++) {
        cin >> temp1 >> temp2 >> temp3;
        G.arcs[temp1][temp2] = temp3;
    }
    DFS(G, c1, c2);
    cout << num <<' '<< maxteam << endl;
}

 

转载于:https://www.cnblogs.com/qujunhui/p/10884382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值