注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那一日,泪水打湿雪花冰冷的心

曾经的滋味,回忆在一次次的离合中,回眸时,那一刻,如涟漪般在一刹那融化

 
 
 

日志

 
 

POJ 2449  

2009-11-01 11:08:51|  分类: poj |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
求s到t的k短路
用A*算法求,f(i)=g(i)+h(i)  其中h(i)表示i到t的最短路,g(i)表示从s到i的路径长度
每次取出f(i)值最小的,当第k次取出t时即求出第k短路
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int n,m,x,ct; 
int gr[1010][1010]; 
int dist[1010],v[1010],ss,kk; 
vector<int> vv1[1000],vv2[1000];
const int INF=1000000000; 
struct node{ 
 int id,fi,gi; 
  friend bool operator <(node a,node b){ 
    if (a.gi==b.gi) return a.fi>b.fi; 
  return a.gi>b.gi; 
 } 
}s[2000010]; 
int init(){ 
  for (int i=0;i<=n;i++){ 
  dist[i]=INF; 
  v[i]=1; 
 } 
 dist[kk-1]=0; 
  for (int i=0;i<n;i++){ 
  int k=n; 
  for (int j=0;j<n;j++) 
      if (v[j] && dist[j]<dist[k]) k=j; 
  if (k==n) break; 
  v[k]=0; 
  for (int j=0;j<n;j++) 
   if (v[j] && dist[k]+gr[k][j]<dist[j]) 
    dist[j]=dist[k]+gr[k][j]; 
 } 
 return 1; 
int solve(){ 
  if (dist[0]==INF) return -1; 
 ct=0; 
 s[ct].id=ss-1; 
 s[ct].fi=0; 
 s[ct++].gi=dist[ss-1]; 
 int cnt=0; 
 while (ct){ 
  int id=s[0].id,fi=s[0].fi,gi=s[0].gi; 
  if (id==kk-1) cnt++; 
    if (cnt==x) return fi; 
  pop_heap(s,s+ct); 
    ct--; 
  for (vector<int>::iterator j1=vv1[id].begin(),j2=vv2[id].begin();j1!=vv1[id].end();j1++,j2++) 
   { 
    s[ct].id=*j1; 
    s[ct].fi=fi+*j2; 
    s[ct++].gi=s[ct].fi+dist[*j1]; 
    push_heap(s,s+ct); 
   } 
 } 
 return -1; 
int main(){ 
 while (scanf("%d%d",&n,&m)!=EOF){ 
  for(int i=0;i<n;i++){
          vv1[i].clear();
          vv2[i].clear();
  }
  for (int i=0;i<n;i++) 
   for (int j=0;j<n;j++) 
    gr[i][j]=INF; 
  for (int i=0;i<m;i++){ 
   int x,y,z; 
   scanf("%d%d%d",&x,&y,&z); 
   x--,y--; 
   vv1[x].push_back(y);
   vv2[x].push_back(z);
   if(z<gr[y][x])
     gr[y][x]=z; 
  } 
  scanf("%d%d%d",&ss,&kk,&x);
  if(ss==kk)
    x++;
  init(); 
  printf("%d\n",solve()); 
 } 
 return 0; 

  评论这张
 
阅读(408)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017