你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
[PAT Advanced Level]1003. Emergency (25)
 
利用深度优先搜索获得最短路径以及最多的支援。
看到有人是先用Dijstra算法获得最短路径,再用DFS求得最短路径的条数,这个以后再实现。
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>  
#include <vector>  
#include <fstream>  
using namespace std;  
    
int city, pathNum, start, dis;  
int *teams;  
int path[501][501] = {0};  
bool isVisited[501] = {false};  
    
int mini = 999999999;  
int current = 0;  
int miniNum = 0;  
int currentTeam = 0;  
int totalTeam = 0;  
vector<int> v;  
    
void DFS(int begin);  
    
int main()  
{  
    //fstream cin("a.txt");  
    
    cin>>city>>pathNum>>start>>dis;  
    teams = new int[city];  
    for(int i = 0; i < city; i++)  
        cin>>teams[i];  
    for(int i = 0; i < pathNum; i++)  
    {  
        int a,b,c;  
        cin>>a>>b>>c;  
        path[a][b] = c;  
        path[b][a] = c;  
    }  
    v.push_back(start);  
    isVisited[start] = true;  
    DFS(start);  
    isVisited[start] = false;  
    v.pop_back();  
    
    cout<<miniNum<<" "<<totalTeam<<endl;  
    
}  
    
void DFS(int begin)  
{  
    if(begin == dis)  
    {  
        for(int i = 0; i < v.size() - 1; i++)  
        {  
            current += path[v[i]][v[i + 1]];  
            currentTeam += teams[v[i]];  
        }  
        currentTeam += teams[v[v.size() - 1]];  
    
        if(current < mini)  
        {  
            mini = current;  
            totalTeam = currentTeam;  
            miniNum = 1;  
        }  
        else if(current == mini)  
        {  
            miniNum++;  
            totalTeam >currentTeam ? totalTeam = totalTeam : totalTeam = currentTeam;  
        }  
        currentTeam = current = 0;  
    }  
    else  
    {  
        for(int i = 0; i < 501; i++)  
        {  
            if(!isVisited[i] && path[begin][i] != 0)  
            {  
                isVisited[i] = true;  
                v.push_back(i);  
                DFS(i);  
                v.pop_back();  
                isVisited[i] = false;  
            }  
        }  
    }  
}
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089