您的位置:首页 > 其它

最短路 POJ2387

2015-08-24 18:29 465 查看
第一种迪杰斯特拉算法求最短路

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>

using namespace std;

int MAX=1<<29;
struct edge
{
int fro,to,val,next;
}e[4010];
int head[1010];
int t,n;
int div[1010];
bool vis[1010];

int main()
{
while(scanf("%d%d",&t,&n)!=EOF)
{
memset(head,-1,sizeof(head));
for(int i=1;i<=2*t;i+=2)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
e[i].fro=a;
e[i].to=b;
e[i].val=c;
e[i].next=head[a];
head[a]=i;
e[i+1].fro=b;
e[i+1].to=a;
e[i+1].val=c;
e[i+1].next=head[b];
head[b]=i+1;
}
queue<int> q;
for(int i=2;i<=n;i++)
{
div[i]=MAX;
vis[i]=false;
}
div[1]=0;
vis[1]=true;
q.push(1);
while(!q.empty())
{
int v=q.front();
q.pop();
vis[v]=false;
for(int i=head[v];i!=-1;i=e[i].next)
{
if(div[v]+e[i].val<div[e[i].to])
{
div[e[i].to]=div[v]+e[i].val;
if(!vis[e[i].to])
{
vis[e[i].to]=true;
q.push(e[i].to);
}
}
}
}
cout<<div
<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: