您的位置:首页 > 其它

POJ1125 Stockbroker Grapevine SPFA或Floyd

2011-03-23 13:01 399 查看
我写的SPFA

数据很水,0MS

#include<iostream>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
const int INF=1000000;
struct GNode
{
GNode(){}
GNode(short num,short len):len(len),num(num){}
short len,num;
};
const int MAX=110;
int Len[MAX];
int SPFA(const vector<vector<GNode> >& Graph,int Source)
{
for(unsigned i=0;i!=Graph.size();i++) Len[i]=INF;
queue<int> Q;
Q.push(Source);
Len[Source]=0;
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(unsigned i=0;i!=Graph[u].size();i++)
if(Len[Graph[u][i].num]>Len[u]+Graph[u][i].len)
{
Len[Graph[u][i].num]=Len[u]+Graph[u][i].len;
Q.push(Graph[u][i].num);
}
}
return *max_element(Len,Len+Graph.size());
}
int main()
{
int v,n,num,len;
while(~scanf("%d",&v) && v)
{
vector<vector<GNode> > Graph(v);
for(int i=0;i!=v;i++)
{
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&num,&len);
Graph[i].push_back(GNode(num-1,len));
}
}
int mindis=INF,mini,data;
for(int i=0;i!=v;i++)
{
data=SPFA(Graph,i);
if(data<mindis) {mindis=data;mini=i;}
}
printf("%d %d/n",mini+1,mindis);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: