A1003 Emergency (25分)
一、技术总结 这是一道考查Djiktra算法的题目,主要是求解最短路径的前提下,求每个城市点权的最大值,同时最短路径的条数。 只需要在Djikstra算法的基本架构下,添加一些条件即可,点权是添加一个数组weight存储每个点的权值,然后再创建数组w,用于存储。初始化是,除了起点s,w[s]=weight[s],其余都初始化为0,使用memset(w, 0, sizeof(w)),进行初始化。 而对于最短路径的条数,设置数组num,然后初始化,num[s] = 1,其余都是初始化为0,memset(num, 0, sizeof(num))。 还有就是书写的问题,注意关系。具体参考代码。 二、参考代码 #include<bits/stdc++.h> using namespace std; const int maxn = 510; const int INF = 100000000; int n, G[maxn][maxn]; bool vis[maxn] = {false}; int d[maxn];//用于记录最短路径 int num[maxn];//用于记录最短路径的条数 int weight[maxn];//记录城市中可以调动的人数 int w[maxn]; void Djikstra(int s){ fill(d, d+maxn, INF); memset(num, 0,