PAT 1003

来源:互联网 发布:李小璐开的淘宝店名字 编辑:程序博客网 时间:2024/05/21 19:22
#include <iostream>using namespace std;int N, M, C1, C2;int numTeam[501];int road[501][501];int visit[501];int minDistance = -1, maxAmount = -1;int cnt = 0;void input(){    cin >> N >> M >> C1 >> C2;    for (int i = 0; i < N; i++)    {        //初始化        visit[i] = 0;        for (int j = 0; j < N; j++)        {            road[i][j] = -1;            road[j][i] = -1;        }        cin >> numTeam[i];    }    int c1, c2, L;    for (int i = 0; i < M; i++)    {        cin >> c1 >> c2 >> L;        road[c1][c2] = L;        road[c2][c1] = L;    }}void DFS(int start, int distance, int amountTeam){    if (distance > minDistance && minDistance != -1)        return;    if (start == C2)    {        if (distance < minDistance || minDistance == -1)//找到最短路径        {            cnt = 1;            minDistance = distance;            maxAmount = amountTeam;        }        else if (distance == minDistance)//最短路径中最多队伍数量        {            cnt++;            if (amountTeam > maxAmount)                maxAmount = amountTeam;        }        return;    }    for (int i = 0; i < N; i++)    {        if (visit[i] == 0 && road[start][i] != -1)        {            visit[i] = 1;            DFS(i, distance + road[start][i], amountTeam + numTeam[i]);            visit[i] = 0;        }    }}int main(){    input();    visit[C1] = 1;    DFS(C1, 0, numTeam[C1]);    cout << cnt << ' ' << maxAmount << endl;    return 0;}

0 0
原创粉丝点击