摘要:题意:求解经过不多于某边数的最短路思路:矩阵连乘,乘的次数就是不多于某边数的最短路,题目给出的顶点需要映射处理View Code 1 #include<iostream> 2 #include<map> 3 #include<stdio.h> 4 #include<string.h> 5 using namespace std; 6 #define N 202 7 struct matrix{ 8 int f[N][N]; 9 matrix(){10 memset(f,0x3f,sizeof(f));11 }12 };13 int num;14
阅读全文
摘要:题意:给出一个有权无向图,顶点代表不同的城市,给出每个城市的汽油价格,一个单位的路程要消耗一个单位的汽油。然后给出汽车油箱的容量c,起点和终点,求出起点到终点的最小花费。思路:把每个点拆成c+1个点,每次只能加1个单位的汽油,然后用dijstra求解。View Code #include<iostream>#include<stdio.h>#include<string.h>#include<queue>using namespace std;#define N 1010#define M 100010#define inf 0x3fffffff
阅读全文
摘要:题意:给出一个有向图、源点、终点,求出源点到终点的最短路径和比最短路径长度大1的路径条数。思路:求出最短路径条数和次短路径条数,如果次短路比最短路长度大一,返回最短路径和次短路径的条数和。否则返回最短路径条数。实现:dist[i][2]表示点i到源点的两条路径长度,cnt[i][2]表计数,用dijstra的贪心思想对状态进行更新,与求最短路不同的是,次短路也需要入队和更新。状态更新如下:1.新值小于最短路:更新次短路及计数,更新最短路及计数。(先把次短路更新为最短路状态,然后更新最短路)2.新值等于最短路:更新最短路计数。3.新值大于最短路,小于次短路:更新次短路及计数。4新值等于次短路:更
阅读全文