您的位置:首页 > 其它

HDU - 1874 -最短路问题

2017-05-31 15:38 204 查看
三种方法

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;}
retu
e820
rn 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: