(poj 2449 Remmarguts' Date)<A*-K短路模板>
2017-08-20 07:45
351 查看
传送门
Solution
推几个b站讲A*的视频(全英文没字幕看个p系列。。雾)Code
// by spli #include<cstring> #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace std; const int N=1010; const int M=100010; int n,m,s,t,k; struct node{ int to,nxt,val; }e1[M],e2[M];int h1 ,h2 ,c1,c2; int dis ; bool vis ; queue<int>q; struct A{ int id,f,g; bool operator <(const A &b)const{ return b.f==f?b.g<g:(b.f<f); } }; priority_queue<A>Q; void add1(int f,int t,int v){ c1++; e1[c1]=(node){t,h1[f],v}; h1[f]=c1; } void add2(int f,int t,int v){ c2++; e2[c2]=(node){t,h2[f],v}; h2[f]=c2; } void spfa(){ memset(dis,0x7f,sizeof(dis)); dis[t]=0;vis[t]=1;q.push(t); while(!q.empty()){ int u=q.front(); q.pop(); vis[u]=0; for(int i=h2[u];i!=-1;i=e2[i].nxt){ int v=e2[i].to; if(dis[v]>dis[u]+e2[i].val){ dis[v]=dis[u]+e2[i].val; if(!vis[v]){ vis[v]=1; q.push(v); } } } } } void A_star(){ int cnt=0; int f,g; if(s==t) k++;//可以说是很无耻了 Q.push((A){s,dis[s],0}); while(!Q.empty()){ A u=Q.top(); 4000 Q.pop(); if(u.id==t){ cnt++; if(cnt==k){ printf("%d\n",u.g); return; } } for(int i=h1[u.id];i!=-1;i=e1[i].nxt){ int v=e1[i].to; g=u.g+e1[i].val; f=g+dis[v]; Q.push((A){v,f,g}); } } printf("-1"); } int main(){ memset(h1,-1,sizeof(h1)); memset(h2,-1,sizeof(h2)); scanf("%d%d",&n,&m); int x,y,z; for(int i=1;i<=m;++i){ scanf("%d%d%d",&x,&y,&z); add1(x,y,z);add2(y,x,z); } scanf("%d%d%d",&s,&t,&k); spfa(); A_star(); return 0; }
相关文章推荐
- poj2449 Remmarguts' Date --- k短路模板(SPFA+A*)
- POJ 2449 Remmarguts' Date (第k短路 A*搜索算法模板)
- POJ - 2449 Remmarguts' Date(k短路模板)
- <A*算法模板>poj 2449 第k短路
- poj-2449-Remmarguts' Date-A*+求K短路
- 【K短路】【A星】Remmarguts' Date POJ 2449 A-Star
- 【解题报告】POJ 2449 Remmarguts' Date -- 有向图第k短路(有重边)
- Remmarguts' Date POJ - 2449 第k短路 SPFA+A*
- poj 2449 Remmarguts' Date(第K短路)
- POJ 2449 Remmarguts' Date 求k短路 A*+dijkstra
- POJ 2449 Remmarguts' Date (求第K短路,A* + Dijkstra)
- 【POJ】2449 Remmarguts' Date【k短路】
- POJ 2449 Remmarguts' Date(A* - 第K短路)
- [第K短路]POJ_2449_Remmarguts' Date
- POJ 2449 Remmarguts' Date (A*搜索求K短路)
- poj 2449Remmarguts' Date uvaoj 10740 not the best dijkstra或spfa或bellman-ford k短路 A*
- 第k短路(POJ 2449: Remmarguts' Date)
- poj 2449 Remmarguts' Date(第K短路)
- POJ 2449 Remmarguts' Date 第k短路 A*搜索
- POJ 2449 Remmarguts' Date(A*+SPFA)K短路问题