HDU

来源:互联网 发布:精准医疗大数据平台 编辑:程序博客网 时间:2024/06/08 04:39

三种方法
1 dijkstra的堆优化
2 bellman的队列优化
3 floyd

#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <string>using namespace std;const int maxn=300;struct Node{  int w,to;   Node(int _a,int _b){w=_a;to=_b;}};vector<Node>G[maxn];void init(){   for(int i=0;i<maxn;i++)    G[i].clear();}struct cmp{  bool operator()(pair<int,int>a,pair<int,int>b){   return a.first>b.first;  };};int main(){   int m,n;   int a,b,c;    while(cin>>m>>n) {  init();     for(int i=1;i<=n;i++)     {cin>>a>>b>>c;        G[a].push_back(Node(c,b));         G[b].push_back(Node(c,a));     }     cin>>a>>b;     priority_queue<pair<int,int> ,vector<pair<int,int> >,cmp>q;     bool vis[maxn];     int d[maxn];     memset(vis,false,sizeof(vis));     memset(d,0x3f,sizeof(d));     q.push(make_pair(0,a));     d[a]=0;     vis[a]=true;     while(!q.empty())     {  int  u=q.top().second;         q.pop();         vis[u]=false;        for(int i=0;i<G[u].size();i++)        { int s=G[u][i].to;            if(d[s]>G[u][i].w+d[u])            { d[s]=G[u][i].w+d[u];               if(!vis[s])               {  q.push(make_pair(d[s],s));                 vis[s]=true;               }            }        }     }     if(d[b]==0x3f3f3f3f)        puts("-1");     else     cout<<d[b]<<endl; }    return 0;}
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <string>using namespace std;const int maxn=300;struct Node{  int w,to;   Node(int _a,int _b){w=_a;to=_b;}};vector<Node>G[maxn];void init(){   for(int i=0;i<maxn;i++)    G[i].clear();}int main(){   int m,n;   int a,b,c;    while(cin>>m>>n) {  init();     for(int i=1;i<=n;i++)     {cin>>a>>b>>c;        G[a].push_back(Node(c,b));         G[b].push_back(Node(c,a));     }     cin>>a>>b;     queue<int>q;     bool vis[maxn];     int d[maxn];     memset(vis,false,sizeof(vis));     memset(d,0x3f,sizeof(d));     q.push(a);     d[a]=0;     vis[a]=true;     while(!q.empty())     {  int u=q.front();         q.pop();         vis[u]=false;        for(int i=0;i<G[u].size();i++)        { int s=G[u][i].to;            if(d[s]>G[u][i].w+d[u])            { d[s]=G[u][i].w+d[u];               if(!vis[s])               {  q.push(s);                 vis[s]=true;               }            }        }     }     if(d[b]==0x3f3f3f3f)        puts("-1");     else     cout<<d[b]<<endl; }    return 0;}
#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>using namespace std;int dp[202][202];int main(){  //ios::sync_with_stdio(false);    int m,n;    int a,b,c;   while(cin>>m>>n)   {memset(dp,0x3f,sizeof(dp));   for(int i=0;i<n;i++)     {cin>>a>>b>>c;     if(c<dp[a][b])     {dp[a][b]=c;     dp[b][a]=c;}     }     for(int i=0;i<m;i++)        dp[i][i]=0;    for(int k=0;k<m;k++)    {  for(int i=0;i<m;i++)        {  for(int j=0;j<m;j++)           dp[i][j]=min(dp[i][k]+dp[k][j],dp[i][j]);        }    }    cin>>a>>b;    if(dp[a][b]==0x3f3f3f3f) puts("-1");    else  cout<<dp[a][b]<<endl;}    return 0;}
原创粉丝点击