摘要:
#include <vector>using namespace std;typedef struct edge{ int v; int w;}edge;#define narray 1001const int maxData = 0x7fffffff; vector<edge> adj[narray]; //邻接表 int m,n; //m为边数,n为顶点数 int d[... 阅读全文
摘要:
//题目类型;最短路-—最短路和相差一个单位的次短路的条数和//本题关键在于理解Dijkstra的贪心思想解题思路:本题若开始直接在Dijkstra中加入针对加1的递推式, 必须在Dijkstra的过程中加入DFS, 很繁琐. 改换求次短路, 然后判断次短路是否比最短路长1. 解法一、A*求第K短路,把前面K条路都求出来,pku 2449 ,但是据说这个题的最后答案超过10^8,把路全... 阅读全文
摘要:
//题目类型;最短路-求最短路的条数//解题思路:类似于贪心的思路,基本方法为采用递推,用 p[] 记录路径条数,//(1)dist[u]+ w(u,v)== dist[v] ,则 p[v]+= p[u]//(2)dist[u]+ w(u,v)< dist[v] 则 p[v]= p[u]。//由于本题边数较多,所以采用邻接表的结构存储 #include <iostream>#in... 阅读全文
摘要:
//题目类型:求K最短路//算法实现:Dijkstra+A*(启发式搜索)//首先求出其他点到des的最短距离,然后用基于BFS的优先队列A*算法求,f(i)=g(i)+h(i) 其中h(i)表示i到des的最短路,g(i)表示从src到i的//路径长度每次取出f(i)值最小的,当第k次取出t时即求出第k短路#include <iostream>#include <queue&g... 阅读全文
摘要:
typedef struct edge{ int a; int b; int value;}edge;edge edges[earraysize];int final[narraysize]; //存储父节点 int nodecount[narraysize]; //存储该节点孩子结点的个数 bool cmp(edge a,edge b){ return a.value<b.value;}i... 阅读全文